繁体   English   中英

网页检查器模式下的JavaFX和Firebug Lite

[英]JavaFX and Firebug Lite in web page inspector mode

我使用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检查器功能的返回值(我想是一个字符串)?

只需将其放在变量中:

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(...);

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

我没有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'的叠加层<div> Firebug Lite注入时,则为true。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM