我有一些jQuery运行在一个移动网站上,做一些布局计算和调整一些元素的大小。
这在我们支持的浏览器上运行得很好--即使是诺基亚的浏览器--但后来我收到报告说诺基亚出现了问题。
然后我意识到我的E72的系统软件是去年年底最后一次更新,所以继续下载了最新的版本。现在,bug出现了。
在经历了向函数添加警报的常见JS调试过程之后,我发现如果我在执行所有布局计算和调整大小的函数中触发警报,那么它就可以工作!如果我省略了警报,什么也不会发生。
在过去,我在IE中偶尔也会遇到类似的情况,无论出于什么原因,IE都需要让JS“暂停”才能赶上它。通常的技巧是在设置为0的setTimeout中对我遇到问题的函数进行包装。
我在诺基亚上试过了,但没成功。然后我试了1秒,10秒,但还是没有成功。只有警报才能让它工作。
关于这个问题有什么理论吗?JS警报在计时JS函数方面是否做了一些事情,这些JS函数可能会被警报或setTimeout以外的其他功能复制
更新:
每个请求的示例代码。这是在它从document ready触发的函数中。
var extraWidths = $icon.width() + $button.width() + 20 + 5;
var containerWidth = $panel.width();
var percentWidth = 100 - ( Math.floor((extraWidths/containerWidth)*100) );
$searchInput.css('width',percentWidth+'%');
alert('hello world'); // if I add this, Nokia works correctly. 我正在做的是,在文档呈现之后,我计算一些元素的宽度,从父容器的总宽度中减去它,然后调整其中的一个输入字段以占用剩余的空间(设置为百分比宽度)。
这在Webkit,Firefox,BlackBerry (OS5和OS6)上运行良好,所以我不认为这是一个代码错误,但希望有人已经遇到了解决办法(除了警报)。
更新2:
经过进一步的研究,我有了一个新的理论:诺基亚网页浏览器不能正确地通知jQuery文档已经准备好了。
我发现,包装需要计算DOM元素尺寸的jQuery只有在我将其包装在setTimeout中时才起作用。这不是一个任意的时间延迟……我需要确保时间延迟比浏览器正确呈现DOM所花费的时间要长。由于我不可能知道给定的设备速度和网络速度,我必须坚持1-2秒的时间,这不会减少它。
那么,我的新问题是:有没有人知道jQuery的document ready在诺基亚设备上不能正常工作的问题?如果是这样,那么不幸的是,我们需要重新考虑我们对jQuery的使用。
发布于 2012-09-18 20:25:42
在您的主体中添加id,并使用$(document.getElementById('bourbodyid')).ready(function(),而不是$(document).ready(function()。
也许与其他方法相比,解决方法并不是那么错误。
https://stackoverflow.com/questions/6810814
复制相似问题