2011-03-31 24 views
4

(Android 2.2でコンパイルされた)ネイティブのものでテストしたところ、window.location.hrefでページがリダイレクトされたときにshouldOverrideUrlLoadingがトリガーされないことがわかりました。 onPageFinishedは通常どおりトリガされます。window.location.href javascriptがshouldOverrideUrlLoadingをトリガーしない

誰でもjavascriptページのリダイレクトをインターセプトする方法をアドバイスできますか? javascriptでページをリダイレクトする他の方法であれば、shouldOverrideUrlLoadingがトリガーされますか? これはshouldOverrideUrlLoadingのバグですか?

おかげで、

6月

答えて

0

は、誰もがjavascriptのページのリダイレクトを横取りする方法をアドバイスしてもらえますか?

WebViewaddJavascriptInterface()で注入するオブジェクトのメソッドを呼び出すようにJavaScriptを変更します。

これはshouldOverrideUrlLoadingのバグですか?

おそらく。それは確かに限界です。

+0

あなたはLOCATION.HREF変更した場合、uは文字通りURLをロードしないので、それはバグです。したがって、これをオーバーライドしてすべてを処理することで、他にURLがロードされていないことを確認することができます。人々はWebViewが自分のページを表示するだけであると仮定します。しかし、あなたはリモートサイトをレンダリングしたいと考えて、実行中のjavascriptを制御しないでください。 – Nappy

+0

@CommonsWareでは、divタグ内のビューを読み込んでいるときにURLを取得する方法を教えていただけますか?インデックスファイルのそのdivタグに他のファイルデータ。この条件はどのように私はURLを取得することができます –

1

私の場合、私のウェブページでwindow.location = "http://xxx"を使用すると、イベントshouldOverrideUrlLoading()はトリガーされません。

ただし、androidurl://などのカスタムURLスキームまたはプロトコルを使用する場合は、shouldOverrideUrlLoading()が発生します。これは、バックhttp://プロトコルへのカスタムプロトコルを変更し、あなたがそこから正しいURLを処理することができます

if (url.startsWith("androidurl://")) { 
    url = url.replaceAll("androidurl://", "http://"); 
} 

:私の問題を回避するには、カスタムプロトコルを使用してshouldOverrideUrlLoading()方法に次のコードを追加する必要でしょう。

これは私のために働く。

0

たぶん、あなたは現在のページを離れようとしているイベントをインターセプトするWebChromeClientさんonJsBeforeUnload()を使用することができます。 onJsBeforeUnload()をオーバーライドし、のフラグをに設定します。

次にロードするURLを傍受するWebViewClientさんonLoadResource()を使用しています。フラグがの場合はとなります。別のURLを開くインテント;それ以外は何もしない。

また、あなたのHTMLに追加することを忘れないでください:

<script> window.onbeforeunload = function(){ 
    return "Leave?"; 
}; </script> 
関連する問題