无法从第二个包含的js文件中的第一个包含的javascript文件调用函数

我正在用Apache Cordova制作一个Android应用程序。 一切都适用于默认情况下使用Chrome的Android 6.0,问题出在使用默认Android浏览器的Android 4.2.2(三星Galaxy S4 mini)上。

如果我没弄错的话,那么应用程序在使用cordova编译并安装在Android操作系统上后,在默认的Android浏览器中“启动”。

在默认的Android浏览器中,页面在加载时为空。 但在Chrome中一切正常。

问题出在默认的Android 4.2.2浏览器中。 它不适用于诺基亚1520(使用Windows Phone操作系统)的默认浏览器。

index.html的:

        

1.js:

 $(document).ready(function() { $('#content').html("test3"); // Works fine (i can see test3 on the page). showLogin(); }); 

2.js(此文件中没有任何内容可用,我无法在页面上看到test1和test2):

 $('#content').html("test1"); function showLogin() { $('#content').html(` test2 `); } 

我做了什么#1

我还尝试在setTimeout()调用showLogin() setTimeout()

 setTimeout(function() { showLogin(); }, 1000); 

我做了什么#2

1.js:

 $(document).ready(function() { $('#content').html("test3"); // Works fine. showLogin(); }); 

2.js(此文件内部没有任何内容):

 $(document).ready(function() { $('#content').html("test1"); function showLogin() { $('#content').html(` test2 `); } }); 

所以Android 4.2.2股票浏览器出了问题。 并且调试输出不起作用。 你想多久坚持一下这个?

这是一种解决方法:将文件写入多个文件并合并它们,然后将它们推送到.apk,这样您最终只能得到1个文件。 缺点是您可能更难以使用合并文件进行调试。 但是,正如你所说,使用Android 6.0它可以工作,所以用它来调试。 一些Google-fu展示了这些选项: Grunt和Gulp.js

其他选择是看看使用requirejs是否有效。 有关详细信息,请参阅此post 。

问题是由多行JavaScript字符串“`”的引号引起的。

我改变了这个:

 function showLogin() { $('#content').html(` test2 `); } 

对此:

 function showLogin() { $('#content').html("test2"); } 

一切都很好。

看起来在Android浏览器中不支持这些引号。 我想这会在2.js文件中触发exception,这就是2.js中的其他代码没有执行的原因。

我最终使用反斜杠作为多行字符串,如下所示:

 function showLogin() { $('#content').html("\ test2\ "); } 

反斜杠也适用于单引号,如下所示:

 function showLogin() { $('#content').html('\ test2\ '); } 

尝试一下,你可以在1.JS的设备上或者你的事件触发调用上动态加载脚本:

 var script = document.createElement('script'); script.src = //path of 2.JS file; script.type = "text/javascript"; script.onload = function () { showLogin();// }; 

问题出在2.js文件中

 $('#content').html("test1"); function showLogin() { $('#content').html("test2"); }); 

在最后一行你使用了小支架,它正在制动function,所以它是未定义的。 在花括号后移除小支架。 工作示例见这里

尝试在标记之前包含所有脚本。

HTML

   ...  

2.js应该包括

 function showLogin() { $('#content').html("test2"); } $(document).ready(function() { $('#content').html("test1"); }); 

1.js应该包括

 $(document).ready(function() { $('#content').html("test3"); // Works fine. showLogin(); }); 

另一种方法

HTML

   ...  

2.js应该包括

 function showLogin() { $('#content').html("test2"); } function showTest1() { $('#content').html("test1"); } 

1.js应该包括

 function showTest3() { $('#content').html("test3"); // Works fine. showLogin(); } 

也许我错了,但我认为“$(’#content’)。html(”test1“);” 它的激动2.js和showLogin从未被称为。

我会尝试这样的事情:

 $(document).ready(function() { $('#content').html("test1"); }); function showLogin() { $('#content').html("test2"); } 

或者至少单独使用showlogin函数来尝试它。

希望能帮助到你