【发布时间】:2013-12-02 15:59:40
【问题描述】:
我有一个 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 文件?
谢谢你:)
编辑:我尝试了在这个线程中找到的解决方案:
jQuery getScript not working in Android WebView when using Local Assets/HTML/Resources
成功了!!!!
【问题讨论】:
-
var script = // construct the script tag;你能发布这个相关的代码吗?你如何构建你的脚本标签?顺便说一句,为什么不使用getScript() jquery 的方法或设置ajax 请求的dataType: "script"? -
在注释中使用`包裹代码
-
请回复!这是相关代码:
var script = $('<script type="text/javascript" src="http://justatest.com/test.js"/>');对于本地文件,src 只是“test.js”。我不知道getScript() jquery 的方法:) 我会看看。另外,我不能将 dataType: 'script' 用于 ajax 请求,因为响应确实是 JSON,带有一些信息和属性,该属性是带有 js 名称的字符串。但是,当我指向外部 js 文件时,一切正常……问题仅在于我指向本地文件时…… -
我也试过
var script = $('<script [...]>' + '</' + 'script>');但没有成功:/
标签: javascript android jquery html ajax