【发布时间】:2011-02-07 16:49:56
【问题描述】:
我正在尝试拦截 window.location 更改以在 Android 应用程序中执行一些本机工作。更具体地说,我覆盖了 WebViewClient 中的调用:
public boolean shouldOverrideUrlLoading(WebView view, String url)
查找以“native://”开头的任何内容。 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 = something”(如在上面的代码中),我只会在本机代码端的 WebViewClient 内得到一个调用。如果我每隔 50 毫秒打一次电话,我就会接听他们所有人。我认为浏览器正在对此进行一些优化。
我想我可以这样解决这个问题:不要使用window.location,更改为将本机对象嵌入到javascript中,并在javascript中调用该对象上的方法。我只是想知道为什么会这样。有更熟悉 JS 的大神分享一下吗?
谢谢
【问题讨论】:
-
“如果我间隔 50 毫秒打一次电话,我会告诉他们所有人。”你如何让通话间隔 50 毫秒?通过 window.setInterval 并将 callNative() 调用放入 setInterval 调用的代码中?
-
setTimeout("callNative", 50*i)
-
你可以尝试做window.location.href = "...",但这似乎是一种很奇怪的方式。也许,用这样的 URL 创建图像?
标签: javascript android