使用本地资产/ HTML /资源时,jQuery getScript无法在Android WebView中运行

时间:2012-03-21 12:08:17

标签: jquery android webview

我有一个包含WebView的原生Android应用。我所有的HTML,js& css已添加到assets文件夹中的Android项目中,所以我在Java代码中初始化我的WebView就像这样......

WebView webView = (WebView)findViewById(R.id.webview);
webView.loadUrl("file:///android_asset/index.htm");

一切正常,直到我需要使用jQuery getScript方法从JavaScript动态加载其他js文件...

var scriptUrl = "scripts/dynamicScript.js";
$.getScript(scriptUrl , function() { alert("Success"); })
    .fail(function(e){ alert("failed: " + JSON.stringify(e)); });

基本上没有加载脚本,我收到以下消息:

failed: {"readState":4,"responseText":"", "status":404, "statusText":"error"}

我还尝试了以下scriptUrl的替代方案,并得到完全相同的结果和消息:

"/scripts/dynamicScript.js"
"./scripts/dynamicScript.js"
"android_asset/scripts/dynamicScript.js"
"../android_asset/scripts/dynamicScript.js"
"file:///android_asset/scripts/dynamicScript.js"

我希望这可能与same-origin-policy有关。任何帮助实现这项工作的人都表示赞赏。

编辑:另外

我现在还尝试了以下$ .getScript()的替代方法。

使用非异步'脚本'ajax调用。这导致与上面完全相同......

$.ajax({
   url: scriptUrl, 
   dataType: 'script', 
   success: function() { alert("Success"); },
   error: function(e){ alert("failed: " + JSON.stringify(e)); },
   async: true
});

还可以动态地将脚本标签插入头部。这似乎不起作用(例如,如果我只是在dynamicScript.js中有一个警报,它从未见过)...

$("<script type='text/javascript' src='" + scriptUrl +"'></script>").appendTo("head");

我可能也值得指出,如果我远程托管网站而不是本地资产,所有上述尝试都有效但是这不是一个可行的解决方案,如果我实例化如下,它可以工作......

WebView webView = (WebView)findViewById(R.id.webview);
webView.loadUrl("http://remote-server/index.htm");

1 个答案:

答案 0 :(得分:7)

啊哈,我似乎已经怀疑它,这个古老的经典作品完成了工作......

var scriptUrl = "scripts/dynamicScript.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);

感谢Phillip Fitzsimmons。不知道为什么jQuery脚本追加不起作用。