私は、Androidアプリケーションでいくつかのネイティブ作業を行うためにwindow.locationの変更をインターセプトしようとしています。より具体的なVEのために、私はWebViewClientに呼び出しを上書き:window.locationがあまりにも頻繁に呼び出されましたか?
public boolean shouldOverrideUrlLoading(WebView view, String url)
で始まるものを探すために、「ネイティブ://」。 JavaScriptコードはこのようなものです。
function callNative() {
window.location = "native://doSomeNativeWork()";
}
function callNativeManyTimes(count) {
for(i = 0 ; i < count ; i ++) {
callNative();
}
}
<a href="javascript:callNativeManyTimes(40);" class="btn large">DoSomeNativeWork</a><br/>
私は見ています問題は、私は「window.locationの=何か」(上記のコードのように)非常に迅速に多くの時間を呼び出す場合、私は唯一のネイティブコード側のWebViewClient内の1つのコールを取得することです。私が50ms離れて電話すると、私はそれらのすべてを得るでしょう。私は、ブラウザがこれを中心にいくつかの最適化を行っていると思っています。
私はこのようにこの問題を解決できると思います:window.locationを使用せず、ネイティブオブジェクトをjavascriptに埋め込み、そのオブジェクトのメソッドをjavascriptで呼び出します。なぜ私はこれが起こっているのだろうかと思っています。いくつかの洞察を共有するために、誰かがもっと慣れ親しんだJSを使うことができます
おかげ
「私が50ms離れて電話すると、私は彼らの誰もが欲しい」あなたは50ms離れて通話をどうやって作るのですか? window.setInterval経由でcallNative()呼び出しをsetIntervalによって呼び出されるコードに入れますか? –
setTimeout( "callNative"、50 * i) – dongshengcn
あなたはwindow.location.href = "..."を実行しようとするかもしれませんが、これはやや奇妙な方法です。たぶん、そのようなURLで画像を作成するのでしょうか? – kirilloid