[英]Popup window in android WebView
I am using webview
to open a link in my app. 我正在使用
webview
在我的应用程序中打开链接。 The link works fine in webview
but when i clicked on an item of webview(link opened) which open a popup my app got crashed. 该链接在
webview
工作正常,但是当我单击webview的一个项目(打开的链接)时,它会弹出一个弹出窗口,我的应用程序崩溃了。 and gives me error . 给我错误。
03-24 16:40:10.680: W/System.err(5798): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@421e0760 is not valid; is your activity running?
03-24 16:40:10.680: W/System.err(5798): at android.view.ViewRootImpl.setView(ViewRootImpl.java:536)
03-24 16:40:10.680: W/System.err(5798): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
03-24 16:40:10.680: W/System.err(5798): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
03-24 16:40:10.680: W/System.err(5798): at android.app.Dialog.show(Dialog.java:286)
03-24 16:40:10.690: W/System.err(5798): at com.android.org.chromium.content.browser.input.SelectPopupDialog.show(SelectPopupDialog.java:217)
03-24 16:40:10.690: W/System.err(5798): at com.android.org.chromium.content.browser.ContentViewCore.showSelectPopup(ContentViewCore.java:2413)
03-24 16:40:10.690: W/System.err(5798): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
03-24 16:40:10.690: W/System.err(5798): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
03-24 16:40:10.690: W/System.err(5798): at android.os.Handler.dispatchMessage(Handler.java:102)
03-24 16:40:10.690: W/System.err(5798): at android.os.Looper.loop(Looper.java:136)
03-24 16:40:10.690: W/System.err(5798): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-24 16:40:10.690: W/System.err(5798): at java.lang.reflect.Method.invokeNative(Native Method)
03-24 16:40:10.690: W/System.err(5798): at java.lang.reflect.Method.invoke(Method.java:515)
03-24 16:40:10.690: W/System.err(5798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-24 16:40:10.690: W/System.err(5798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-24 16:40:10.690: W/System.err(5798): at dalvik.system.NativeStart.main(Native Method)
I am opening webview like this. 我正在这样打开webview。
Intent it = new Intent(MyMainActivity.this,WebViewActivity.class);
it.putExtra("url", url);
ParentActivity parent = (ParentActivity) getParent();
parent.startChildActivity("WebViewActivity", it);
My WebViewActivity code is this. 我的WebViewActivity代码是这个。
String url = in.getStringExtra("url");
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(client);
webView.loadUrl(url);
May I know what is the correct way to achieve my objective? 我可以知道实现目标的正确方法是什么?
You can add webview programmatically instead of layout file. 您可以通过编程方式添加Webview而不是布局文件。
Replace your WebView with LinearLayout (or any appropriate) and get instance of that Layout. 将WebView替换为LinearLayout(或任何适当的布局),然后获取该Layout的实例。
Create new WebView in you Activity dynamically. 在您的Activity中动态创建新的WebView。
Code below: 代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
urls = getIntent().getStringExtra("key_url");
linearWeb = (LinearLayout) findViewById(R.id.webviewLayout);
webView = new WebView(getParent());
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDomStorageEnabled(true);
progressBar.setVisibility(View.GONE);
linearWeb.addView(webView);
showBox();
}
public void showWebView() {
if (!((Activity) getParent()).isFinishing()) {
setUpAction();
}
}
private void setUpAction() {
if (!TextUtils.isEmpty(urls)) {
webView.loadUrl(urls);
this.webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
this.webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url,
Bitmap favicon) {
progressBar.setVisibility(View.VISIBLE);
}
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onPageFinished(WebView view, String url) {
progressBar.setVisibility(View.GONE);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.