0

我使用 JavaFX 创建了一个简单的浏览器WebView。我还添加了 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 的检查器函数的返回值(我想是一个字符串)?

4

2 回答 2

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 的执行结果,您可以向下转换为适当的类型。例如,如果你知道它是 a String,你可以做

String result = (String) engine.executeScript(...);

文档明确列出了不同的Javascript 类型如何映射到返回的 Java 类型。

于 2015-04-09T12:13:59.413 回答
0

我对 JavaFX 没有任何经验,但我知道 Firebug Lite 不会公开您使用它检查的元素,也不会触发任何与它本身相关的事件。因此,您无法直接访问该信息。请参阅相关源代码

Firebug Lite 基本上所做的是<div>为荧光笔创建一个叠加层,并为它设置两个事件处理程序mousemovemousedown为其处理鼠标点击,您也可以出于您的目的收听这些事件。

要通过 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事件。但是该操作应该仅在启用检查器时发生,当检查的元素实际上是<div>称为“fbInspectFrame”的覆盖层时,Firebug Lite 在检查时注入。

为了获得实际检查的元素(注意它是一个对象,而不是字符串),Firebug Lite 提供了一个名为 的函数Firebug.browser.getElementFromPoint(),该函数使用事件中的鼠标坐标调用。

然后,您的 JavaFX 代码需要访问此 JavaScript 元素。

于 2015-04-10T12:15:28.487 回答