android web读本地文件,Android Web-View:将本地Javascript文件注入到远程网页

本文介绍了一种在Android 4.4.2 (API级别19)中,如何通过WebView加载并执行本地JavaScript文件的方法,以解决'不允许加载本地资源'的问题。关键步骤包括启用JavaScript,设置允许跨文件URL访问,然后使用BASE64编码将JS文件转换为字符串,通过JavaScript注入到WebView中执行。
摘要由CSDN通过智能技术生成

小编典典

有一种方法可以“强制”从本地资产(例如,assets/js/script.js)中注入本地Javascript文件,并规避“不允许加载本地资源”:file:/// android_assets / js/script.js …’问题。

webview-loading-javascript-file-in-assets-folder))中描述的内容,并带有其他BASE64编码/解码,用于将Javascript文件表示为可打印的字符串。

我正在使用Android 4.4.2,API级别19虚拟设备。

以下是一些代码片段:

[assets / js / script.js]:

'use strict';

function test() {

// ... do something

}

// more Javascript

[MainActivity.java]:

...

WebView myWebView = (WebView) findViewById(R.id.webView);

WebSettings webSettings = myWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

webSettings.setAllowUniversalAccessFromFileURLs(true);

myWebView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return false;

}

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

injectScriptFile(view, "js/script.js"); // see below ...

// test if the script was loaded

view.loadUrl("javascript:setTimeout(test(), 500)");

}

private void injectScriptFile(WebView view, String scriptFile) {

InputStream input;

try {

input = getAssets().open(scriptFile);

byte[] buffer = new byte[input.available()];

input.read(buffer);

input.close();

// String-ify the script byte-array using BASE64 encoding !!!

String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);

view.loadUrl("javascript:(function() {" +

"var parent = document.getElementsByTagName('head').item(0);" +

"var script = document.createElement('script');" +

"script.type = 'text/javascript';" +

// Tell the browser to BASE64-decode the string into your script !!!

"script.innerHTML = window.atob('" + encoded + "');" +

"parent.appendChild(script)" +

"})()");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

myWebView.loadUrl("http://www.example.com");

...

2020-05-01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值