我正在将我的网站移植到 Android,并使用 Webview 向用户显示内容。我的网站有很多Javascript函数,我想拦截它们。我已经看过 a "solution" here .
但是,我认为应该有一个更合适的方法,使用 Javascript 接口(interface):
this.webView.addJavascriptInterface(this.webJavascriptInterface, "Android");
这样,我必须修改我的网站以调用 myFunction()
和 Android.myFunction()
。我试图在界面中留下一个空白字符串:
this.webView.addJavascriptInterface(this.webJavascriptInterface, "");
但是结果和我猜的一样,不行。有没有办法在 Webview 中覆盖当前的 Javascript 函数?
最佳答案
// android
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.loadUrl("javascript:function inputClick(val){native.abcd(val);}"); // override js function
}
});
webView.loadUrl("file:///android_asset/test.html");
webView.addJavascriptInterface(new Object() {
@JavascriptInterface
public void abcd(int val) {
Log.e(TAG, "#js abcd" + val);
}
}, "native");
<!-- html -->
<input type="button" onclick="inputClick(2)" value="button">
== 2015-09-07 补充说明
因为 javascript 函数可以覆盖,所以您可以在页面完成时覆盖 javascript 函数。
如果没有,正常的实现可能是这样的:
// js code
function inputClick(val) {
native.abcd(val); // native and abcd defined in WebView method addJavascriptInterface
}
但是这个正常的工具在 iOS(Object-C) 中似乎不起作用,并且必须编辑 HTML 页面。 只是将 java-javascript 桥代码从 HTML 移动到 Java。 (参见示例代码中的方法 onPageFinished)
关于javascript - 使用 Android Webview 覆盖当前的 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20048914/