使用以下代码,我通过重写方法page.html
将跟踪像素添加到某个页面renderHead(Component component, IHeaderResponse response)
(这样可以正常工作)。
page.html看起来像这样:
<!doctype html>
<html xmlns:wicket="http://wicket.apache.org/">
<head>
..
<wicket:container wicket:id="header"></wicket:container>
</head>
<body>
..
<script wicket:id="scriptHolder" type="text/javascript" > I would like to add my script here
</script>
..
</body>
</html>
TrackingPixel.java:
public abstract class TrackingPixel extends AbstractDefaultAjaxBehavior {
protected TrackingPixel(TrackingPixelType type) {
..
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
response.renderOnDomReadyJavaScript("WebtrekkInstance = {
..
'path' : 'anyPath',
...:...
..
};
");
}
}
renderHead-method
在主页面添加了一个跟踪像素。右键点击页面 - &gt; source coude显示以下脚本已添加到页面中:
<script type="text/javascript" >
Wicket.Event.add(window, "domready", function(event) {
WebtrekkInstance = {
..
'path' : 'anyPath',
...:...
..
};
..
;});
</script>
现在我想将trackingpexil添加到一些弹出窗口中。我的问题是I can't add some script to the body
。方法renderHead(Component component, IHeaderResponse response)
没有这样做,因为(我猜是因为弹出窗口弹出到同一页面,所以只有一个头部,它不会渲染两次)。所以我尝试使用WebMarkupContainer
执行此操作,如下所示。
OurServicePopup.java
/**
* Class to display our service as popup
*/
public class OurServicePopupPage<T> extends WebPage {
public OurServicePopupPage(PageParameters parameters) {
super(parameters);
}
@Override
protected void onInitialize() {
add(new OurServicePixel());
super.onInitialize();
}
}
OurServicePixel.java如下所示:
public class OurServicePopupPixel extends TrackingPixel{
public OurServicePopupPixel() {
}
WebMarkupContainer scriptContainer = new WebMarkupContainer("scriptContainer");
@Override
public void renderHead(Component component, IHeaderResponse response) {
scriptContainer.add(new AttributeAppender("type", Model.of("text/javascript")));
scriptContainer.add(
new AttributeAppender("src","WebtrekkInstance = {
..
'path' : 'anyPath',
...:...
..
};
");
}
add(scriptContainer); //this shows error
}
这里的问题是我无法添加scriptContainer。 add(scriptContainer);
不起作用,因为OurServicePopupPixel是行为而不是页面。
答案 0 :(得分:3)
也许您可以简单地将Label
组件与setEscapeModelStrings(false)
一起使用。但似乎有点奇怪。
我并不完全了解你的javascript正在做什么,但也许你可以尝试在DOM准备就绪时执行它。像这样使用renderHead
:
public void renderHead(IHeaderResponse response) {
response.render(OnDomReadyHeaderItem.forScript( ... YOUR SCRIPT HERE ... ));
}
我希望它有所帮助。