![](/img/trans.png)
[英]Error inflating class android.webkit.WebView when loading webview
[英]execute javascript code in an android.webkit.WebView without loadUrl or XHR
我正在編寫一個phoneGap插件,以允許在android設備上進行多點觸摸(希望最終將其包含在phonegap / callback中)
事件委托使用插件成功回調大約需要200毫秒,而使用WebView.loadUrl('javascript:somecodehere()')調用則需要大約50毫秒
不幸的是,loadUrl具有使軟鍵盤閃爍的副作用,這對於一般解決方案是不可接受的。
Phonegap的Plugin.success使用內部Web服務器和XmlHttpRequest對象發送數據,這種方法太慢了。
是否存在將javascript發送到網絡瀏覽器的第三種方法? (甚至向Javascript引擎發送戳以導致事件發生,以便該事件可以檢查自定義jsInterface對象)
看來我們已經開發出類似的東西
https://github.com/Philzen/webview-multitouch-polyfill
但是,我之前從未遇到過您描述的問題,但是也許您想在設備上進行測試或為該項目貢獻自己的專業知識。 它已在Cordova(Phonegap)路線圖上得到建議,因此我們將很高興為每個用戶和/或貢獻者提供幫助!
看一下WebView類中的addJavascriptInterface
。 聽起來更像您在尋找什么。
在您的插件中嘗試調用:
this.ctx.sendJavascript(statement);
速度不如loadUrl快,但可能比返回PluginResult快一點。
您可以使用一個本質上是數組列表和訪問器的Java對象來滾動自己的精簡消息隊列,然后使用addJavascriptInterface將其綁定到javascript上下文中,並注入一個使用setTimeout調用隊列訪問器方法的javascript輪詢循環。 每當您要執行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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.