簡體   English   中英

Android WebView:確定<a>target =“_ blank”</a>

[英]Android WebView: Determine <a> target= “_ blank”

是否可以檢查用戶是否已點擊帶有target =“_ blank”的html鏈接。

我想要做的是在我的應用程序中在WebView中顯示htlm,但在android默認瀏覽器中啟動“外部”鏈接。 “外部”鏈接對我來說是一個target =“_ blank”的鏈接。 所有其他鏈接應在webview中處理。

例如:用戶在我的WebView中點擊這樣的鏈接:

<a href="http://www.google.com" target="_blank">new window</a>

然后我想在Android瀏覽器中打開給定的URL。

我用shouldOverrideUrlLoading()嘗試了它,但此時我無法確定目標是“_blank”還是普通鏈接(沒有目標)。

我也試過setSupportMultipleWindows(true); 與onCreateWindow()結合使用,但在此回調中我無法獲取url。

我無法更改顯示的HTML,因此我無法使用帶有addJavascriptInterface()的JavaScript Bridge

我還可以做些什么? 還有其他想法嗎?

我自己剛剛解決了這個問題。 這是我修復它的方法。

mWebView.setWebChromeClient(new WebChromeListener() {
    @Override
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
        WebView newWebView = new WebView(view.getContext());
        newWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(browserIntent);
                return true;
            }
        });
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();
        return true;
    }
});

您可以執行以下操作:( 丑陋但可以工作)

在onPageFinished()內部,將一個javascript代碼片段注入頁面,其中包含:

  1. 使用target = _blank屬性迭代所有元素
  2. 將這些元素的href更改為external:// [original href]

如果該網站使用jquery,它應該很容易。 如果沒有,您仍然可以使用標准DOM Javascript來完成。

在你的shouldOverrideUrlLoading()上,查找那些external:// *鏈接並在外部打開它們。

要注入javascript,請執行以下操作:

webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM