我正在编写一个phoneGap插件,允许Android设备上的多点触控(希望最终将其包含在phonegap / callback中)
事件委托使用插件成功回调需要大约200ms,使用WebView.loadUrl('javascript:somecodehere()')调用大约需要50ms
不幸的是,loadUrl具有闪烁软键盘的副作用,这对于一般解决方案是不可接受的。
Phonegap的Plugin.success使用内部Web服务器和XmlHttpRequest对象来发送数据,这种方法太慢了。
有没有第三种方法将javascript发送到网络浏览器? (甚至发送戳到javascript引擎以导致事件发生,以便事件可以检查自定义的jsInterface对象)
答案 0 :(得分:0)
在WebView类中查看addJavascriptInterface
。这听起来更像你在寻找什么。
答案 1 :(得分:0)
在你的插件中尝试调用:
this.ctx.sendJavascript(statement);
不如loadUrl快,但它可能比返回PluginResult快一点。
答案 2 :(得分:0)
您可以使用基本上是arraylist和访问器的java对象来滚动自己的剥离消息队列,然后使用addJavascriptInterface将其绑定到javascript上下文并注入一个javascript轮询循环,该循环使用setTimeout来调用accessor方法你的队列。每当你有javascript执行时,只需将它添加到你的arraylist。我不确定它会如何表现,但也许值得一试?
class JSQueue {
private ArrayList<String> messages;
public String getMessage() {
String message = "";
if(messages.size() >0) {
message = messages.remove(0);
}
return message;
}
public void addMessage(String message) {
messages.add(message);
}
}
JSQueue jsq = new JSQueue();
dc.appMobiCanvas.hiddenView.addJavascriptInterface(jsq, "jsq");
dc.appMobiCanvas.hiddenView.loadUrl("javascript:(function checkJSQ(){eval(jsq.getMessage());setTimeout(checkJSQ, 50);}})();");
//add messages via jsq.addMessage();
答案 3 :(得分:0)
似乎我们已经开发了类似的东西
https://github.com/Philzen/webview-multitouch-polyfill
但是,我从未经历过您之前描述的问题,但也许您想在您的设备上进行测试,或者可能会为项目贡献您的专业知识。已在Cordova (Phonegap) Roadmap上提出建议,因此我们很乐意为每个用户和/或贡献者提供帮助以帮助实现这一目标!