【问题标题】:Android webview custom JS not get message from postMessage callAndroid webview自定义JS没有从postMessage调用中获取消息
【发布时间】:2015-09-01 20:44:49
【问题描述】:

我使用带有护照的 nodejs 服务器来提供第 3 方身份验证。我在我的 Anrdroid 客户端上设置了一个 WebView 来加载以下 html:

<!DOCTYPE html>
<html>
<head>
    <script src="file:///android_asset/oauth.js" type="text/javascript"></script>
</head>

<body>
</body>

</html>

有了这个javascript:

Android.callit('Loaded javascript file');

window.addEventListener('message', function(event) {
  Android.callit('got message event');

  authWindow.close();
}, false);

var authWindow = window.open("https://myserver/twitter/signin", "");

在成功验证第三方服务器后,我的 nodejs 服务器会重定向到这样的页面:

<html>
  <head>
    <script>window.opener.postMessage({"auth":true}, '*');</script>
  </head>
  <body>
  </body>
</html>

这是我启动 webview 的 Activity:

public class OAuthActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.oauth);

        WebView webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.addJavascriptInterface(new JSInterface(), "Android");
        webView.setWebViewClient(new WebViewClient() {
            public void onReceivedSslError(WebView webView, SslErrorHandler handler, SslError error) {
                handler.proceed();
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        webView.loadUrl("file:///android_asset/oauth.html");
    }

    public class JSInterface {
        @JavascriptInterface
        public void callit(String with) {
            Log.i("TEST", with);
        }
    }
}

那么为什么 'message' 事件永远不会触发呢?

作为说明,我已在浏览器中完成此操作,并且效果很好。只是当我尝试在 android webview 中使用它时不会。

【问题讨论】:

  • 你解决了吗?我被困在同样的问题上。我正在使用 postMessage 来实现 crossPageChannel 通信(使用 Google Closure),我看到了 postMessage 调用,但没有触发“消息”事件

标签: android android-webview


【解决方案1】:

如果您在上面的 JSON 中添加转义字符,上述代码将正常工作

window.opener.postMessage({\"auth\":true}, \"*\");

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多