Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 脚本标记似乎在移动设备上自动异步加载_Javascript - Fatal编程技术网

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相同的问题。