0

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


Document document = ...;

document.getImplementation().hasFeature("Views", "2.0"));

这返回true

Object obj = document.getImplementation().getFeature("Views", "2.0");

这会引发java.lang.UnsupportedOperationException: Not supported yet。


我做错了什么,如何解决它以及解决此问题的最佳方法是什么(我想查看/更改此文档的关联计算样式)?谢谢你。

编辑

我认为这是最初应该提供的详细信息的重要部分:

java.lang.UnsupportedOperationException: Not supported yet.
    at com.sun.webpane.webkit.dom.NodeImpl.getFeature(Unknown Source)

返回的Document对象来自在WebEngine上触发的javafx包。

4

3 回答 3

3

可能是这个片段解决了你的问题:

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"));
于 2012-08-03T16:32:12.353 回答
2

问题是 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.DOMImplementationImpl.java]、[com.sun.webpane.webkit.dom.NodeImpl.java] 中为它创建一个存根

public Object getFeature(String feature, String version) {
    throw new UnsupportedOperationException("Not supported yet.");
}

那是一个特点。问候,-uta

于 2012-08-03T16:13:42.190 回答
1

您能否检查 document.getImplementation() 返回的类(尝试打印其 .getClass())

我最好的猜测是 .getFeature() 是 Java 5 中的一个增强,看起来在你的类路径中有一个半生不熟的 DOMImplementation 实现。获取正在加载的真实类并检查其文档,以查看它们是否具有 getFeatures() 方法的实现。

于 2012-07-31T09:39:17.743 回答