如何在Java中通过文档接口访问外部样式表?
我有一个指向有效对象的接口引用(instanceof文档)。问题是我想查看与DOM中特定元素相关联的style属性,但它只会公开内联的属性(而样式是通过外部的样式表设置的)。最终目标是获取对ViewCSS的引用,因为我想查看关联的计算样式-我将如何做到这一点?我推测,可能需要获取DocumentView对象(如果需要,如何获取,因为我没有找到任何方法返回上述对象)如何在Java中通过文档接口访问外部样式表?,java,css,dom,document,javafx-2,Java,Css,Dom,Document,Javafx 2,我有一个指向有效对象的接口引用(instanceof文档)。问题是我想查看与DOM中特定元素相关联的style属性,但它只会公开内联的属性(而样式是通过外部的样式表设置的)。最终目标是获取对ViewCSS的引用,因为我想查看关联的计算样式-我将如何做到这一点?我推测,可能需要获取DocumentView对象(如果需要,如何获取,因为我没有找到任何方法返回上述对象) 这将返回true Object obj = document.getImplementation().getFeature("Vi
这将返回true
Object obj = document.getImplementation().getFeature("Views", "2.0");
这会抛出一个java.lang.UnsupportedOperationException:不受支持。
我做错了什么,如何修复它,最好的方法是什么(我想查看/更改此文档的相关计算样式)?多谢各位 编辑: 我认为这是最初应该提供的细节的一个重要部分:
java.lang.UnsupportedOperationException: Not supported yet.
at com.sun.webpane.webkit.dom.NodeImpl.getFeature(Unknown Source)
返回的文档对象来自javafx包,该包在WebEngine上触发。您能检查Document.getImplementation()返回的类是什么吗(试着打印它的.getClass())
Object obj = document.getImplementation().getFeature("Views", "2.0");
我最好的猜测是.getFeature()是Java5中的一个增强,它看起来像是在类路径中有一个不成熟的dominemplementation实现。获取正在加载的真实类并检查其文档,以便查看它们是否有getFeatures()方法的实现。能否检查document.getImplementation()返回的类(尝试打印其.getClass())
我最好的猜测是.getFeature()是Java5中的一个增强,它看起来像是在类路径中有一个不成熟的dominemplementation实现。获取正在加载的真实类并检查其文档,以便查看它们是否有getFeatures()方法的实现。问题在于Webkit中的[Source/WebCore/dom/Node.idl]不支持[getFeature]方法:
#if 0
DOMObject getFeature(in DOMString feature,
in DOMString version);
DOMUserData setUserData(in DOMString key,
in DOMUserData data,
in UserDataHandler handler);
DOMUserData getUserData(in DOMString key);
#endif /* 0 */
所以,我唯一能做的事就是在
[com.sun.webpane.webkit.dom.domImplementImpact.java],
[com.sun.webpane.webkit.dom.NodeImpl.java]
public Object getFeature(String feature, String version) {
throw new UnsupportedOperationException("Not supported yet.");
}
这是一个很好的例子。
当做
-uta问题在于Webkit中的[Source/WebCore/dom/Node.idl]不支持[getFeature]方法:
#if 0
DOMObject getFeature(in DOMString feature,
in DOMString version);
DOMUserData setUserData(in DOMString key,
in DOMUserData data,
in UserDataHandler handler);
DOMUserData getUserData(in DOMString key);
#endif /* 0 */
所以,我唯一能做的事就是在
[com.sun.webpane.webkit.dom.domImplementImpact.java],
[com.sun.webpane.webkit.dom.NodeImpl.java]
public Object getFeature(String feature, String version) {
throw new UnsupportedOperationException("Not supported yet.");
}
这是一个很好的例子。
当做
-uta可能是这个片段解决了您的问题:
Document doc = ???;
HTMLDocument htmlDoc = (HTMLDocument)doc;
final HTMLBodyElement body = (HTMLBodyElement)htmlDoc.getBody();
//JS [window] access
DOMWindowImpl wnd =
(DOMWindowImpl)((DocumentView)htmlDoc).getDefaultView();
//Style access
CSSStyleDeclaration style = wnd.getComputedStyle(body, "");
assertEquals("Style extraction", "blue", style.getPropertyValue("background-color"));
可能这个片段解决了您的问题:
Document doc = ???;
HTMLDocument htmlDoc = (HTMLDocument)doc;
final HTMLBodyElement body = (HTMLBodyElement)htmlDoc.getBody();
//JS [window] access
DOMWindowImpl wnd =
(DOMWindowImpl)((DocumentView)htmlDoc).getDefaultView();
//Style access
CSSStyleDeclaration style = wnd.getComputedStyle(body, "");
assertEquals("Style extraction", "blue", style.getPropertyValue("background-color"));
我已经删除了我以前的评论墙,呵呵
com.sun.webpane.webkit.dom.domImplementImpl
用于getImplementation()和com.sun.webpane.webkit.dom.HTMLDocumentImpl
用于javafx。场景网状物WebEngine
/getDocument()。看起来这可能是一个半生不熟的实现……我已经删除了我以前的评论墙,呵呵com.sun.webpane.webkit.dom.domImplementImpl
用于getImplementation()和com.sun.webpane.webkit.dom.HTMLDocumentImpl
用于javafx。场景网状物WebEngine
/getDocument()。看起来这可能确实是一个不成熟的实现……我相信您遇到了一个bug。我把它归档了,因为我相信你遇到了一只虫子。我已将其归档为嗯,对不起,我遗漏了什么-是JFX2.2的一部分吗?否则,2.1中的正确包路径是什么?对于assertEquals
,[DOMWindowImpl]也是JFX2.2的一部分(最后一刻),但它没有文档记录,需要更改。项目的这一部分已经发生了实质性的更改,在JFX2.1中无法访问。[assertEquals]是一个单元测试验证过程(CSS“背景色”有一个“蓝色”值)。嗯,对不起,我遗漏了什么-是JFX2.2的一部分吗?否则,2.1中的正确包路径是什么?对于assertEquals
,[DOMWindowImpl]也是JFX2.2的一部分(最后一刻),但它没有文档记录,需要更改。项目的这一部分已经发生了实质性的更改,在JFX2.1中无法访问。[assertEquals]是一个单元测试验证程序(CSS“背景色”有一个“蓝色”值)。