在androidwebview中为本地文件创建脚本标记时出现问题



我有一个Android应用程序,它包含在一个简单的WebView中,在项目的assets文件夹中加载一个本地html文件。

HTML有一个标记,它调用(AJAX)一个外部服务,并期望一个字符串作为响应,该字符串表示.js文件名(比如"test.js")

在test.js中有一个简单的函数声明,如:

var testFunction = function(){
    // some code here
}

AJAX回调然后通过javascript构造一个指向.js文件的标记,并将其附加到文档的头部;然后调用testFunction:

$.ajax('externalService').done(function(response){
    var script = // construct the script tag;
    $('head').append(script);
    testFunction();
}); 

重要提示:script标记指向外部.js文件,如

<script src="http://justatest.com/test.js">

一切都很好!

现在我试着做同样的事情,将test.js放入项目的assets文件夹中。显然,我用一个相对路径更改了回调中创建的脚本的src:

<script src="test.js"></script>

但是当我试图调用函数testFunction时,我会得到一个错误(testFunction没有定义)。

本地路径是正确的(我把jquery.js放在test.js的同一个本地文件夹中,并将其直接加载到html中,没有任何错误)。

我也把所有的属性(比如type="text/javascript")放在标签中。。。

那么,为什么webview不以这种方式加载本地.js文件呢?

谢谢:)

编辑:我尝试了在这个线程中找到的解决方案:

当使用本地资产/HTML/资源时,jQuery getScript在Android WebView中不起作用

它成功了!!!!

我尝试了在这个线程中找到的解决方案:

当使用本地资产/HTML/资源时,jQuery getScript在Android WebView中不起作用

它成功了!

我报告解决方案:

var scriptUrl = "test.js";
var head = document.getElementsByTagName("head")[0];
script = document.createElement('script');
script.type = 'text/javascript';
script.src = scriptUrl;
script.onload = function() { alert("Success"); };
script.onerror = function(e) { alert("failed: " + JSON.stringify(e)); };
head.appendChild(script);

因此,如果我使用jquery append()方法,它不起作用,但如果我使用javascript appendChild方法,它起作用。。。

最新更新