无法从第二个包含的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函数来尝试它。
希望能帮助到你