Android Webview,正在资源文件夹中加载javascript文件
||
我已经看到这个问题了很多次,但是仍然无法使我的代码正常工作。
我希望我的Web视图加载一些URL(例如www.google.com),然后应用存储在
assets/jstest.js
中的一些javascript,其中包含以下内容:
function test(){
document.bgColor=\"#00FF00\"; //turns to green the background color
}
这是我尝试加载JS的位置:
@Override
public void onPageFinished(WebView view, String url){
view.loadUrl(\"javascript:(function() { \"
+ \" document.bgColor=\'#FF0000\';\" //turns to red the background color
+ \" var script=document.createElement(\'script\'); \"
+ \" script.setAttribute(\'type\',\'text/javascript\'); \"
+ \" script.setAttribute(\'src\', \'file:///android_asset/jstest.js\'); \"
+ \" script.onload = function(){ \"
+ \" test(); \"
+ \" }; \"
+ \" document.getElementsByTagName(\'head\')[0].appendChild(script); \"
+ \"})()\");
}
我知道这里的javascript可以正常工作,因为背景颜色实际上变成了红色,但是由于某种原因,它不会加载jstest.js
。我认为问题可能出在文件路径中(我确定javascript代码的其他所有行都是正确的),但对我来说似乎正确。文件位于正确的文件夹中。
我想念什么?
编辑:
由于WebResourceResponse
类仅在API级别11中可用,这就是我最后得出的结论。
public void onPageFinished(WebView view, String url){
String jscontent = \"\";
try{
InputStream is = am.open(\"jstest.js\"); //am = Activity.getAssets()
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while (( line = br.readLine()) != null) {
jscontent += line;
}
is.close();
}
catch(Exception e){}
view.loadUrl(\"javascript:(\" + jscontent + \")()\");
}
jstest.js
只包含:
function() {
document.bgColor=\"#00FF00\";
}
没有找到相关结果
已邀请:
5 个回复
戊袱
并添加了一个WebViewClient.shouldInterceptRequest()替代,以查找这些替代项并使用AssetManager.open()从资产中加载它们。 我不喜欢这种麻烦的一件事是,asset:方案对我的视图加载的任何页面上的任何第三方HTML / Java脚本都是开放的,从而使他们可以访问我的应用程序的资产。 我没有尝试过的一种替代方法是使用数据:URL将子资产嵌入到书签中,但是这样做可能很麻烦。 如果有一种方法可以操作我正在loadUrl()中加载的JS小书签的安全上下文,我会更喜欢它,但是我找不到类似的东西。 这是一个片段:
宦哨抹存胳
俯乡骚钵皆
在清单中,我定义了提供者:
这是注入Web视图的JavaScript:
这是myjavascriptfile.js(作为示例):
蜂佬渺
膛嵌墒缅欠
在HTML代码中,我可以使用
在Java中,以下内容也可以使用(您还需要在资产中添加
)
使用“ 18”作为方案,使我可以从通过HTTPS服务的页面加载本地资产,而不会由于混合内容而导致安全问题。 这些都不需要设置: