2016-05-10 7 views
0

最新のjxBrowserにいくつか問題があります。
私はonScriptContextCreatedでのjavascript-javaのブリッジを追加しました:JSでJavascript-Java-Bridgeが動作しないことがある(JxBrowser 6.3)

 mainBrowser.addScriptContextListener(new ScriptContextAdapter() 
    { 
     @Override 
     public void onScriptContextCreated(ScriptContextEvent event) 
     { 
      Browser browser = event.getBrowser(); 
      JSValue jsValue = browser.executeJavaScriptAndReturnValue("window"); 
      jsValue.asObject().setProperty("app", new JavascriptBridge()); 
      logger.info("Set app context in JS"); 

     } 
    }); 

を、私は2つのJava関数が呼び出される 'gwtAdapter' と呼ばれる機能があります。

function gwtAdapter(name, params, callback) 
{ 

try 
{ 
    if (name == "saveSelectedLoginData") 
    { 
     app.sendMessageNew(name, params, callback); 

     console.log("DURCH DURCH DURCH"); 
    } 
    else 
    { 
     console.log("Call sendMessage: \n\tName:" + name + "\n\tParams: " + params); 

     app.sendMessage(name, [params]); 

     console.log("Call sendMessage: \n\tName:" + name + "\n\tCallback: " + callback); 
     app.setMessageCallback(name, callback); 
    } 

} 
catch(err) 
{ 
    console.log("Error in gwtAdapter: " + err.message); 
} 
} 

をしないでくださいそれらの機能の合理性について議論する;)彼らには理由がある。
ブラウザがapp.sendMessageに達したときにブラウザがハングしていて、ログやエラーメッセージが表示されない場合があります。その後、私はDevToolsコンソールと対話できなくなりました。

追加する必要のある情報が見つからないため、追加する必要がある情報がわかりません。
LogLevelは既にLevel.ALLにあります。

ご不明な点がありましたら、お気軽にお問い合わせください。

Edit_1:

jxbrowser-browser.log:

Mai 10, 2016 11:51:04 AM com.teamdev.jxbrowser.chromium.BrowserType getDefault 
INFORMATION: JxBrowser type: HEAVYWEIGHT 

jxbrowser-chromium.log:空

jxbrowser-ipc.log:それは、このエラーのために有益な何かを記録しません。

Edit_2:

奇妙な... 吊り下げ後、関数を渡すのに約8分かかりましたが、その後はjavascript-java-bridgeが壊れています。ここで

いくつかのログ:

Mai 10, 2016 2:52:55 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=907, level=0, message='Save LoginData now!', lineNumber=568, sourceId='file:///workspace/xxxxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 
Mai 10, 2016 2:52:55 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnInvokeJSJavaMessage{type=OnInvokeJSJavaEvent, uid=13, javaObjectId=0, contextPtr=140448130669824, methodName='sendMessageNew', parameters='s21:saveSelectedLoginData:s158:{"saveLoginData": {"selectedUser": "testuser", "selectedPassword": "testuser", "selectedSystem": "xxxxxx", "selectedLanguage": "de"}}:of140448149924128:', returnValue='', errorMessage=''}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run 
INFORMATION: WRITE: OnInvokeJSJavaMessage{type=OnInvokeJSJavaEvent, uid=12, javaObjectId=0, contextPtr=140448130669824, methodName='setMessageCallback', parameters='s6:getUrl:of140448129618576:', returnValue='', errorMessage='Failed to send message.'}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run 
INFORMATION: WRITE: ExecuteJavaScriptMessage{type=ExecuteJavaScript, uid = 40, frameId=-1, javaScript='window', hasReturnValue=true, returnValue='null'}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: ExecuteJavaScriptMessage{type=ExecuteJavaScript, uid = 40, frameId=-1, javaScript='window', hasReturnValue=true, returnValue='oo140448128891328:'}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run 
INFORMATION: WRITE: JSInvokeFunctionMessage{type=JSInvokeFunction, uid=41, objectPtr=140448128891328, functionPtr=140448149924128, contextPtr=140448130669824, frameId=-1, args='on:', result='null', error='null'}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: JSInvokeFunctionMessage{type=JSInvokeFunction, uid=41, objectPtr=140448128891328, functionPtr=140448149924128, contextPtr=140448130669824, frameId=-1, args='on:', result='ou:', error=''}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelWriter run 
INFORMATION: WRITE: OnInvokeJSJavaMessage{type=OnInvokeJSJavaEvent, uid=13, javaObjectId=0, contextPtr=140448130669824, methodName='sendMessageNew', parameters='s21:saveSelectedLoginData:s158:{"saveLoginData": {"selectedUser": "testuser", "selectedPassword": "testuser", "selectedSystem": "xxxxxxx", "selectedLanguage": "de"}}:of140448149924128:', returnValue='', errorMessage=''}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=1119, level=0, message='voidFunction called', lineNumber=1153, sourceId='file:///workspace/xxxxxxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=1120, level=0, message='voidFunction-response: null', lineNumber=1156, sourceId='file:///workspace/xxxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=1121, level=0, message='DURCH DURCH DURCH', lineNumber=95, sourceId='file:///workspace/xxxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: JSInvokeFunctionMessage{type=JSInvokeFunction, uid=39, objectPtr=140448151648656, functionPtr=140448129618576, contextPtr=140448130669824, frameId=-1, args='s234:{"response":{"url":"xxxxxxxxx"},"exceptions":{},"success":true}:', result='xxxxxxxx', error=''}, SocketInfo{cid=0, bid=0, channelType=Render} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=1122, level=0, message='Login now!', lineNumber=570, sourceId='file:///workspace/xxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 
Mai 10, 2016 3:01:15 PM com.teamdev.jxbrowser.chromium.internal.ipc.MemoryChannelReader a 
INFORMATION: READ: OnConsoleMessage{type=OnConsoleMessage, uid=1123, level=0, message='Error in gwtAdapter: undefined', lineNumber=110, sourceId='file:///workspace/xxxxxx/processes/Contents/Login/js/functions.js'}, SocketInfo{cid=0, bid=0, channelType=Browser} 

私はXXXXXX

Edit_3で一部を置き換え:

を、私はそれを得たと思います。多分それはバグでしょうか?

function testFunction() 
{ 
    gwtAdapter("testFunction", '{"gwtIndexGuiReady":true, "xxxxx":1000, "isNewItem":true}', testFunc2); 
} 

function testFunc2() 
{ 
    gwtAdapter("testFunc2", '{"gwtIndexGuiReady":true, "xxxxx":1000, "isNewItem":true}', voidFunction); 
} 

function voidFunction(response) 
{ 
    console.log("voidFunction called"); 
    if(typeof response !== 'undefined') 
    { 
     console.log("voidFunction-response: " + response); 
    } 
} 

手順エラーを再現する:gwtAdapterでapp.sendMessage上

  1. スタートJxBrowser
  2. オープンデベロッパーツール
  3. セットブレークポイント
  4. コールtestFunction最初のいくつかのコードで

    ();

ブリッジは二gwtAdapterコールで正常に動作していない方法を参照してください。まず、関数呼び出し(testFunctionからのsendMessage)が正常に動作しているが、第2の関数呼び出し(testFunc2からのsendMessage)は動作しません。

少し説明:

gwtAdapterから最後のパラメータは、(関数がJSFunctionとしてコールバックである)は、Javaから実行されるコールバックである:このコールバックで

JSValue jsValue = mainBrowser.executeJavaScriptAndReturnValue("window"); 

    logger.info("Call callback for: " + name); 

    function.invoke(jsValue.asObject(), messageMap.get(name)); 

別がありますgwtAdapterとsendMessageへの呼び出しはそこで壊れます。つまり、約8:30分sendMessageでハングしてから、この関数を渡します。

編集_4:

おそらくスレッドの問題ですか? 私はそれがjavascriptコールバックを実行していると思うし、このコールバックではJava(sendMessage)で関数を実行しようとします。私はそれがjavascriptを実行することはできませんと並列呼び出しを受信すると思います。

+1

この場合、ログメッセージは非常に重要です。たとえば、OnConsoleMessageメッセージで、「gwtAdapter:undefined」、lineNumber = 110、sourceId = 'file:/// workspace/xxxxxx/processes/Contents/Login/js/functionsのJavaScriptコードにエラーがあることがわかります。 JavaScriptコードのエラーのためにJavaコールバックが呼び出されないようです。 JavaScriptコードがgwtAdapter()関数でエラーをスローしないことを確認してください。 – Vladimir

答えて

0

昨日TeamDevが、問題が解決されたjxBrowserのバージョン6.4(Chromium v​​49)をリリースしました。

関連する問題