我使用WebView
使用JavaFX创建了一个简单的浏览器。我还添加了Firebug Lite来检查网站。为了启用Firebug Lite,我使用了WebEngine
和方法executeScript()
:
engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}");
如何在JavaFX中拦截Firebug Lite检查器功能的返回值(我猜的字符串)?
答案 0 :(得分:1)
只需将其放入变量:
Object result = engine.executeScript("if (!document.getElementById('FirebugLite')){"+
"E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;"+
"E = E ? document['createElement' + 'NS'](E, 'script') :"+
"document['createElement']('script');"+
"E['setAttribute']('id', 'FirebugLite');"+
"E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');"+
"E['setAttribute']('FirebugLite', '4');"+
"(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);"+
"E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}"
);
返回值的实际类型取决于执行Javascript的结果,您可以向下转换为适当的类型。例如,如果你知道它是String
,你可以做
String result = (String) engine.executeScript(...);
documentation明确列出了不同的Javascript类型如何映射到返回的Java类型。
答案 1 :(得分:0)
我对JavaFX没有任何经验,但我知道Firebug Lite不会公开您检查过的元素,也不会触发任何与之相关的事件。因此,您无法直接访问该信息。请参阅related source code。
Firebug Lite基本上做的是为荧光笔创建<div>
叠加层,并为mousemove
和mousedown
设置两个事件处理程序,以便处理鼠标点击,也可以听你的目的。
要通过JavaScript通过Firebug Lite检查元素,您可以使用以下代码:
document.addEventListener("mousedown", function(e) {
if (e.target.id === "fbInspectFrame") {
var inspectedElement = Firebug.browser.getElementFromPoint(e.clientX, e.clientY);
// Here goes the code, which processes the inspected element
}
});
<强>解释强>
要获取被检查元素,您必须收听mousedown
事件。但是只有在启用了检查器时才会发生这种情况,当被检查的元素实际上是在检查时注入的名为'fbInspectFrame'Firebug Lite的覆盖<div>
时,就会发生这种情况。
要获取实际的被检查元素(请注意它是一个对象,而不是一个字符串),Firebug Lite提供了一个名为Firebug.browser.getElementFromPoint()
的函数,该函数使用事件中的鼠标坐标进行调用。
然后,您的JavaFX代码需要访问此JavaScript元素。