是的,我知道这很重要,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允许我时,我很乐意设置赏金。
非常感谢任何见解。
答案 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并在将其写入响应输出流之前删除任何您不想要的内容。