Javascript 脚本标记似乎在移动设备上自动异步加载
这是一个奇怪的 我的页面中有几个带有内联代码的Javascript 脚本标记似乎在移动设备上自动异步加载,javascript,Javascript,这是一个奇怪的 我的页面中有几个带有内联代码的…标记,用于逻辑上分离代码片段。例如:.... 现在发生的是,有时脚本标记中声明的函数在另一个脚本标记中不可见,即使函数脚本标记在代码中位于前面 为了更好地解释这一点,请考虑这段代码: <script> function DoSomething() { alert("something"); } </script> <script id=blockA> function Foo() { $("#b
…
标记,用于逻辑上分离代码片段。例如:..
..
现在发生的是,有时脚本标记中声明的函数在另一个脚本标记中不可见,即使函数脚本标记在代码中位于前面
为了更好地解释这一点,请考虑这段代码:
<script>
function DoSomething() {
alert("something");
}
</script>
<script id=blockA>
function Foo() {
$("#btn").on("click", function() {
alert("calling DoSomething");
DoSomething();
});
}
</script>
<script>
$(function() {
// Calling Foo() from within
// ready, so any access to DOM from Foo
// *should* be safe!
Foo();
});
</script>
函数DoSomething(){
警惕(“某物”);
}
函数Foo(){
$(“#btn”)。在(“单击”,函数(){
警报(“呼叫剂量计”);
DoSomething();
});
}
$(函数(){
//从内部调用Foo()
//准备好了,那么从Foo访问DOM吗
//*应该*安全!
Foo();
});
现在,在每个桌面浏览器上,这都可以正常工作。但是,在iPhone的mobile chrome和safari上,当按下按钮时,会显示btn
未定义DoSomething
。在安卓系统上,它运行良好
我不知道为什么会发生这种情况,因为DoSomething在按钮事件处理程序连接到事件之前已明确定义。现在,如果我将DoSomething
移动到定义Foo
之前的行,那么它就可以工作了
有人能解释这种行为吗
*iphone5s,ios9.3.5;移动铬55.0.2883.79 很奇怪!这些是内联脚本,还是您正在使用
src
属性?您确定没有在脚本标记上使用async
或defer
属性吗?对我来说,这听起来像是一个浏览器错误,我期待着看到答案。我绝对肯定,我检查了三遍。而且,是的,它们都是内联的,就像示例中一样。不确定这是否是浏览器错误,因为Safari也会失败。iOS上的Chrome使用系统webview(WKWebView),因此它可能会出现与Safari iOS相同的问题。