我需要删除Tapestry添加到每个页面底部的脚本

时间:2013-10-10 17:49:19

标签: tapestry

是的,我知道这很重要,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)
{
}

我非常需要它,当SO允许我时,我很乐意设置赏金。

非常感谢任何见解。

1 个答案:

答案 0 :(得分:1)

这似乎是一件奇怪的事情,因为你会破坏一切。但您可以通过从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并在将其写入响应输出流之前删除任何您不想要的内容。