1

是的,我知道这很重要,Tapestry 需要它来支持 JS,但我根本不使用 Tapestry JS 功能。

我已经设法删除了 Tapestry 添加的所有通用 CSS 和 JS,但我找不到从大多数页面底部删除此脚本的方法:

Tapestry.onDOMLoaded(function() {
    //blebleble
});

我尝试的是覆盖 JavaScriptSupport 类,提供我自己的完全空的实现。但是剧本还在!我相信负责插入此脚本的方法被调用addScript(),但为它们提供空实现并不能解决问题。

AppModule 的一部分:

@Contribute(ServiceOverride.class)
public static void setupApplicationServiceOverrides(
        MappedConfiguration<Class, Object> configuration, ObjectLocator locator)
{
    configuration.add(JavaScriptSupport.class, new JavaScriptSupportOverride());
}

JavaScriptSupportOverride 的一部分:

@Override
public void addScript(String format, Object... arguments)
{
}

@Override
public void addScript(InitializationPriority priority, String format,
        Object... arguments)
{
}

我非常需要它,如果允许我,我很乐意设置赏金。

任何见解将不胜感激。

4

1 回答 1

2

这似乎是一件奇怪的事情,因为你会破坏一切。但是您可以通过从 MarkupRenderer 管道中删除“JavaScriptSupport” MarkupRendererFilter来做到这一点:

YourAppModule.java

public static void contributeMarkupRenderer(OrderedConfiguration<MarkupRendererFilter> config) {
    config.add("JavaScriptSupport", null);
}

Tapestry 使用 MarkupRendererFilters 将 CSS 和 JS 文件等内容添加到 HTML。下载 Tapestry 源代码并查看 TapestryModule.java。似乎您可能想要删除/调整一些核心过滤器,其中包括:

configuration.add("DocumentLinker", documentLinker);
configuration.add("JavaScriptSupport", javaScriptSupport);
configuration.add("RenderSupport", renderSupport);
configuration.add("InjectDefaultStylesheet", injectDefaultStylesheet);
configuration.add("ClientBehaviorSupport", clientBehaviorSupport);
configuration.add("Heartbeat", heartbeat);
configuration.add("ValidationDecorator", defaultValidationDecorator);

* 编辑 *

after:*已更改为的引用before:*(因为第一个过滤器也最后运行)。

另一种解决方案是让所有核心过滤器运行并贡献您自己的 MarkupRendererFilter,它的顺序是“之前:*”。此过滤器可以通过DOM并在将其写入 Response 输出流之前删除您不想要的任何内容。

于 2013-10-11T08:12:07.030 回答