我在使用最新的jxBrowser时遇到了一些问题 我在onScriptContextCreated中添加了javascript-java-bridge:
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");
}
});
在JS中,我有一个名为' gwtAdapter'其中调用了两个Java函数:
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);
}
}
重现错误的步骤:
第一个函数调用(来自testFunction的sendMessage)工作正常但第二个函数调用(来自testFunc2的sendMessage)将不起作用。
一点解释:
来自gwtAdapter的最后一个参数是一个回调,它将从Java执行(其中function是作为JSFunction的回调):
JSValue jsValue = mainBrowser.executeJavaScriptAndReturnValue("window");
logger.info("Call callback for: " + name);
function.invoke(jsValue.asObject(), messageMap.get(name));
在这个回调中,还有另一个对gwtAdapter的调用,sendMessage会在那里中断,换句话说,它会在sendMessage中挂起大约8:30分钟然后传递这个函数。
Edit_4:
也许这是一个线程问题? 我认为它正在执行javascript-callback,在这个回调中它试图在Java中执行一个函数(sendMessage)。我认为它不能执行javascript并且并行接收调用。
答案 0 :(得分:0)
昨天TeamDev为jxBrowser发布了6.4版本(Chromium v49),问题解决了。
答案 1 :(得分:0)
我们最近有一个类似的问题。
我们找到了这个解决方案:
我们相信问题的原因是: