Android WebView Custom JS не получает сообщение от вызова postMessage
Я использую свой сервер nodejs с паспортом, чтобы обеспечить стороннюю аутентификацию. Я установил WebView на своем клиенте Anrdroid для загрузки следующего 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>
Вот моя активность, которая запускает веб-просмотр:
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.
0 ответов
Приведенный выше код будет работать нормально, если вы добавите escape-символы в указанном выше JSON как
window.opener.postMessage({\"auth\":true}, \"*\");