【发布时间】:2014-02-27 06:20:08
【问题描述】:
我有一个简单的浏览器应用程序,我的onCreateWindow 看起来像这样:
if (userGesture) {
WebView childView = new WebView(webBrowserActivity);
WebSettings settings = childView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setBuiltInZoomControls(true);
settings.setSupportMultipleWindows(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
childView.addJavascriptInterface(new MyInterface(),"NAME");
<--- code in here to add the view to a ViewPager.
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childView);
resultMsg.sendToTarget();
Log.v(TAG, "Opening popup for " + childView.getUrl());
webBrowserActivity.invalidateOptionsMenu();
return true;
} else {
return false;
}
我稍后尝试添加此接口,我还尝试在页面加载后调用reload() 或loadUrl(),因为文档说必须在加载页面之前添加 javascript 接口。这些都没有帮助。有没有人成功做到这一点?
谢谢。
编辑:我应该提到我在 4.4 上看到了更多,我正在使用 Chrome 的桌面调试器,我可以进入控制台并在第一个 webview 而不是第二个 webview 上看到 window.NAME 对象。在 4.3 上,它似乎经常工作。
我编辑了上面的代码以显示我正在使用的设置。我添加到 WebView 的 javascript 界面在添加到 Activity 启动时创建的第一个 WebView 时工作正常。
【问题讨论】:
-
您使用的是哪个版本的 Android?
-
在 4.4 上,我确定这是正在发生的事情,因为我可以附加桌面 Chrome 以调试移动浏览器。在 4.3 上,我遇到了同样的问题,但只是在一些弹出窗口上,但因为我无法轻松调试,所以我不知道那里到底发生了什么。
-
我只是在 4.3 上玩了一段时间,它似乎总是在那里工作,一定是新的 4.4 更改的问题。
-
您能否保留对子视图的引用并在 将 resultMsg 发回后添加 javascript?我认为 sendToTarget 将异步运行,因此之后立即执行可能还不够。
-
我尝试过这样做,我尝试过刷新页面并读取界面,加载新的 url,无论我尝试什么,如果 WebView 是使用 onCreateWindow 创建的,它就不会工作。我确实有一个讨厌的解决方法,我创建一个新的 WebView 并使用相同的 url,效果很好。
标签: android android-webview chromium webviewclient