【问题标题】:problems when creating a script tag to a local file in android webview在android webview中为本地文件创建脚本标签时出现问题
【发布时间】: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 = $('&lt;script type="text/javascript" src="http://justatest.com/test.js"/&gt;'); 对于本地文件,src 只是“test.js”。我不知道getScript() jquery 的方法:) 我会看看。另外,我不能将 dataType: 'script' 用于 ajax 请求,因为响应确实是 JSON,带有一些信息和属性,该属性是带有 js 名称的字符串。但是,当我指向外部 js 文件时,一切正常……问题仅在于我指向本地文件时……
  • 我也试过var script = $('&lt;script [...]&gt;' + '&lt;/' + 'script&gt;');但没有成功:/

标签: javascript android jquery html ajax


【解决方案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 方法它起作用...

【讨论】:

  • +1 表示 onload,onerror 语法.. 很难找到 javascript 方法的帮助.. 该死的 Eclipse 在开发过程中也没有自动完成方法.. 就像 30 年前在 fotran 中开发一样。 .
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
相关资源
最近更新 更多