如何在Java中通过文档接口访问外部样式表?

如何在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

我有一个指向有效对象的接口引用(instanceof文档)。问题是我想查看与DOM中特定元素相关联的style属性,但它只会公开内联的属性(而样式是通过外部的样式表设置的)。最终目标是获取对ViewCSS的引用,因为我想查看关联的计算样式-我将如何做到这一点?我推测,可能需要获取DocumentView对象(如果需要,如何获取,因为我没有找到任何方法返回上述对象)


这将返回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“背景色”有一个“蓝色”值)。