4

私たちのアプリでは、webview を使用してビュー内に外部リンクをロードしています。loadurl メソッドを使用してリンクをロードし、プリローダーを表示するように webview クライアントを設定し、webview のリンクの変更をリッスンするように webchrome クライアントを設定しました。

URL が webview 内に読み込まれました。リンクが読み込まれると、いくつかの iframe があり、その中にテキスト リンクがあります。リンクをクリックすると、webview 自体ではなく、デフォルトのブラウザーでページを開く必要があります。

min-sdk / API レベル 8 を使用してプロジェクトをビルドします。以下は、参照用のコード スニペットです。Oncreate は、webview クライアントと webchromeclient を webview にアタッチし、URL をそれに割り当てます。

private class SomWebViewClient extends WebChromeClient{
    public void onProgressChanged (WebView view, int newProgress){
        if(newProgress == 100){

        }
    }
}
private class SomWebViewDefClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
    @Override
    public void onLoadResource (WebView view, String url){
        if(url.equalsIgnoreCase("http://google.com")){
            view.stopLoading(); 
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            view.canGoBack();
        }
    }
}

WebViewClient を webview に追加して、shouldOverrideUrlLoading メソッドで URL の変更を特定しようとしました。しかし、ここでキャプチャされたイベントはありません。webview url の iframe 内でクリックを処理する方法はありますか。

別のリンクを webview (iframe を持たない) で開いてみたところ、shouldOverrideUrlLoading 内でトリガーされたクリックをトレースできました。ただし、URL に iframe が含まれている場合、ユーザーが webview 内のリンクをクリックすると、shouldOverrideUrlLoading 内をトレースできず、新しいブラウザー ウィンドウではなく同じ webview 自体で開かれます。

問題を検索したとき、正確な問題を見つけることができませんでした。誰かが同様の問題に直面し、解決策を見つけた場合は、共有してください。

他に何か必要な場合は、お知らせください。

よろしくお願いします Srinivasan.C

4

2 に答える 2

1

Same Origin Policyを破ったのかもしれません。この同様の投稿を見てください。

編集: このセキュリティ ポリシーを克服する方法はありますが、直面するリスクを受け入れる必要があります。応答に、「Access-Control-Allow-Origin:」というヘッダーがあることを確認してください。

于 2013-05-24T06:39:47.597 に答える
0

リンクに属性 target="_top" を追加できる場合、これにより shouldOverrideUrlLoading() がトリガーされます。次の JavaScript コードはこれを行います。

function change_links_target()
{   
    var all_document_links = mFrameDocument.getElementsByTagName("a");
    for (i = 0; i < all_document_links.length; i++){
        all_document_links[i].setAttribute("target", "_top");
    }
}   
于 2015-09-25T15:42:37.403 に答える