简体   繁体   English

Android WebView中的弹出窗口

[英]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而不是布局文件。

  1. Replace your WebView with LinearLayout (or any appropriate) and get instance of that Layout. 将WebView替换为LinearLayout(或任何适当的布局),然后获取该Layout的实例。

  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM