首页 文章

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

提问于
浏览
2

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

HTML有一个标记,它调用(AJAX)一个外部服务,并期望一个表示.js文件名的String(比如'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();
});

重要提示:脚本标记指向外部.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文件?

谢谢 :)

EDIT: 我尝试了在这个帖子中找到的解决方案:

jQuery getScript not working in Android WebView when using Local Assets/HTML/Resources

它工作!!!!

1 回答

  • 1

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

    jQuery getScript not working in Android WebView when using Local Assets/HTML/Resources

    它工作了!

    我报告解决方案:

    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方法它工作...

相关问题