javascript - 使用 Android Webview 覆盖当前的 Javascript 函数

标签 javascript android interface webview

我正在将我的网站移植到 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/

相关文章:

javascript - JS - 如何仅在已经切换的情况下切换 CSS 类

javascript - 我应该将 meteor 元素的哪些文件推送到 Git 存储库?

android - 如何通过用户输入动态填充 ExpandableListView?

c# - 访问者模式——接口(interface)与抽象类

javascript - 我怎样才能使用javascript来解这个方程?

javascript数组推送空键和值

java - 覆盖接口(interface)方法

interface - 空接口(interface)有什么用

android - 如何在Android应用程序上停止音频

android - Facebook SDK Android,java.lang.RuntimeException : Unable to get provider com. facebook.internal.FacebookInitProvider