【问题标题】:how to access an external stylesheet through the Document interface in Java?如何通过 Java 中的 Document 接口访问外部样式表?
【发布时间】:2012-08-09 22:35:17
【问题描述】:

我有一个指向有效对象的接口引用 (instanceof Document)。问题是我想查看 DOM 中与特定元素关联的 style 属性,但它只会暴露 inline 属性(而 style 已通过 external 样式表设置)。最终目标是获取对 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 包。

【问题讨论】:

标签: java css dom document javafx-2


【解决方案1】:

也许这个片段可以解决你的问题:

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"));

【讨论】:

  • 嗯,抱歉,我错过了什么 - DOMWindowImpl 是 JFX2.2 的一部分吗?否则 2.1 中正确的包路径是什么? assertEquals 也是如此。
  • [DOMWindowImpl] 是 JFX2.2 的一部分(最后一刻),但它没有文档记录并且可以更改。项目的那部分本质上发生了变化,在 JFX2.1 中无法访问。 [assertEquals] 是一个单元测试验证程序(CSS“背景颜色”有一个“蓝色”值)。
【解决方案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.");
}

那是feature。 问候, -uta

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我之前的cmets墙已经删了,呵呵。 com.sun.webpane.webkit.dom.DOMImplementationImpl 用于 getImplementation()com.sun.webpane.webkit.dom.HTMLDocumentImpl 用于 javafx.​scene.​web.​WebEngine / getDocument()。看来这可能确实是一个半生不熟的实现的情况..
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多