如果在 WebChromeClient#onCreateWindow 的回调中创建了 webview,则 Android WebView addJavascriptInterface 不起作用 [英] Android WebView addJavascriptInterface does not work if the webview is created in the callback of WebChromeClient#onCreateWindow
本文介绍了如果在 WebChromeClient#onCreateWindow 的回调中创建了 webview,则 Android WebView addJavascriptInterface 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是我的测试代码.我的问题是在第二页中我无法引用 AndroidFunction2.我正在使用 Android 4.4 的 Nexus 7 上对此进行测试.但在搭载 Android 4.0 的 sumsang i9100 上没问题.是我做错了什么,还是有安卓的错误?
主活动
public class MainActivity extends Activity {WebView mWebView1;WebView mWebView2;@覆盖protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);最终 FrameLayout mainFrame = (FrameLayout) this.findViewById(R.id.mainFrame);mWebView1 = new WebView(this);mWebView1.getSettings().setJavaScriptEnabled(true);mWebView1.getSettings().setSupportMultipleWindows(true);mWebView1.setWebViewClient(new WebViewClient() {@覆盖public boolean shouldOverrideUrlLoading(WebView view, String url) {返回假;}});mWebView1.setWebChromeClient(new WebChromeClient() {@覆盖public boolean onCreateWindow(WebView view, boolean isDialog,boolean isUserGesture, Message resultMsg) {mWebView2 = new WebView(MainActivity.this);mWebView2.getSettings().setJavaScriptEnabled(true);mWebView2.getSettings().setSupportMultipleWindows(true);mWebView2.setWebChromeClient(new WebChromeClient() {@覆盖public void onConsoleMessage(String message, int lineNumber, String sourceID) {Log.d("WebView", "Line:" + lineNumber + ", " + message);}});mWebView2.addJavascriptInterface(新对象(){@JavascriptInterface公共无效你好2(){}}, "AndroidFunction2");((WebViewTransport)resultMsg.obj).setWebView(mWebView2);resultMsg.sendToTarget();mainFrame.addView(mWebView2);返回真;}});mWebView1.addJavascriptInterface(新对象(){@JavascriptInterface公共无效你好1(){}}, "AndroidFunction1");mWebView1.loadUrl("file:///sdcard/test_1.html");mainFrame.addView(mWebView1);}}
还有两个网页,
test_1.html:
<身体><a href="test_2.html" target="_blank">转到测试 2</a><div><a href="javascript:alert(typeof AndroidFunction1);">警报(AndroidFunction1 的类型);</a>
<div><a href="javascript:alert(typeof window.AndroidFunction1);">alert(typeof window.AndroidFunction1);</a>