如何立即从 Android Java 调用 WebView Java 脚本中的函数?
How to call a function in WebView Javascript from Android Java without delay?
使用此方法调用 javascript 函数时,回调中有几毫秒的延迟(10 毫秒 - 50 毫秒)
webView.evaluateJavascript("javascript: updateARObject()", callback);
如何在javascript中即时调用一个函数,所有文件都在Android的资产文件夹中。
是否可以使用像 Xwalkview 这样的自定义 WebView?
或者两者之间的套接字连接?
ARCore 正在与 Three.js 实时通信,如何实现?
回调存在的原因是因为它不能从 android 应用程序立即完成。
主要原因是Android使用WebView
到运行javascript。现代 Android WebView
只是包裹在 android 视图中的 Google Chrome 的一个实例。如您所知,此实例需要 运行 在单独的进程中。如果选择深入挖掘,他会发现 android 应用程序和 WebView
之间的通信是通过 AIDL 服务完成的,因为所有进程间通信都应该在 android.[=14= 中完成]
考虑到将 AIDL 调用写入堆栈所需的时间,分配内存并形成消息(主要的 AIDL 通信方法),发送它,在 Chrome 中解包,解析,执行 javascript并再次执行所有这些操作以回答 - 10ms - 50ms 是非常低的延迟。
也许ArCore有自己的js处理器来快速处理js文件。或者 Google Chrome 有自己的方法来与 ArCore(或内部实例)通信。我不知道 - 但它是 Google 开发的产品 - 我认为他们知道他们的捷径。
自定义 WebView
可能有效 - 唯一的问题是基本上它将是一个新版本的浏览器,由于一大堆可能原因。
希望对你有所帮助。
从 kitkat 开始,使用 evaluateJavascript 方法而不是 loadUrl 来调用 javascript 函数,如下所示:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("enable();", null);
} else {
webView.loadUrl("javascript:enable();");
}
您可以通过设置使用函数调用延迟:
window.setTimeout(function () { ... })
但是,它不一定会立即运行,也不会明确设置延迟。如果您将使用 setTimeout,它会从执行队列中删除函数,并且只会在 JavaScript 完成当前执行队列后调用它。
console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2
有关详细信息,请参阅 http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/
希望您会找到答案。干杯!
使用此方法调用 javascript 函数时,回调中有几毫秒的延迟(10 毫秒 - 50 毫秒)
webView.evaluateJavascript("javascript: updateARObject()", callback);
如何在javascript中即时调用一个函数,所有文件都在Android的资产文件夹中。
是否可以使用像 Xwalkview 这样的自定义 WebView? 或者两者之间的套接字连接? ARCore 正在与 Three.js 实时通信,如何实现?
回调存在的原因是因为它不能从 android 应用程序立即完成。
主要原因是Android使用WebView
到运行javascript。现代 Android WebView
只是包裹在 android 视图中的 Google Chrome 的一个实例。如您所知,此实例需要 运行 在单独的进程中。如果选择深入挖掘,他会发现 android 应用程序和 WebView
之间的通信是通过 AIDL 服务完成的,因为所有进程间通信都应该在 android.[=14= 中完成]
考虑到将 AIDL 调用写入堆栈所需的时间,分配内存并形成消息(主要的 AIDL 通信方法),发送它,在 Chrome 中解包,解析,执行 javascript并再次执行所有这些操作以回答 - 10ms - 50ms 是非常低的延迟。
也许ArCore有自己的js处理器来快速处理js文件。或者 Google Chrome 有自己的方法来与 ArCore(或内部实例)通信。我不知道 - 但它是 Google 开发的产品 - 我认为他们知道他们的捷径。
自定义 WebView
可能有效 - 唯一的问题是基本上它将是一个新版本的浏览器,由于一大堆可能原因。
希望对你有所帮助。
从 kitkat 开始,使用 evaluateJavascript 方法而不是 loadUrl 来调用 javascript 函数,如下所示:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("enable();", null);
} else {
webView.loadUrl("javascript:enable();");
}
您可以通过设置使用函数调用延迟:
window.setTimeout(function () { ... })
但是,它不一定会立即运行,也不会明确设置延迟。如果您将使用 setTimeout,它会从执行队列中删除函数,并且只会在 JavaScript 完成当前执行队列后调用它。
console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2
有关详细信息,请参阅 http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/
希望您会找到答案。干杯!