【问题标题】:Override current Javascript functions with Android Webview使用 Android Webview 覆盖当前的 Javascript 函数
【发布时间】:2013-12-01 16:04:29
【问题描述】:

我正在将我的网站移植到 Android,并使用 Webview 向用户显示内容。我的网站中有很多Javascript函数,我想拦截它们。我已经看过a "solution" here

不过,我认为应该有更合适的方式,使用 Javascript 接口:

this.webView.addJavascriptInterface(this.webJavascriptInterface, "Android");

这样,我必须修改我的网站以同时调用myFunction()Android.myFunction()。我试图在界面中留下一个空白字符串:

this.webView.addJavascriptInterface(this.webJavascriptInterface, "");

但结果和我猜的一样,它无法工作。有没有办法在 Webview 中覆盖当前的 Javascript 函数?

【问题讨论】:

    标签: javascript android interface webview


    【解决方案1】:

    你可以通过注入一个重新定义旧函数的新javascript来做到这一点,基本上你可以用这个覆盖现有的函数。

    例如,要覆盖window.print()函数,我使用这个

    webView.loadUrl("javascript:window.print = function() {Android.printPage();}")
    

    【讨论】:

      【解决方案2】:
      // 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 年 9 月 7 日添加一些说明

      因为 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

      【讨论】:

      • 请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多