page.html
次のコードでは、メソッドをオーバーライドして、trackingpixel を一部のページに追加します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
メイン ページにトラッキング ピクセルを追加します。ページ上でマウスを右クリック -> ソース コードは、次のスクリプトがページに追加されたことを示しています。
<script type="text/javascript" >
Wicket.Event.add(window, "domready", function(event) {
WebtrekkInstance = {
..
'path' : 'anyPath',
...:...
..
};
..
;});
</script>
ここで、trackingpixel をポップアップに追加したいと思います。私の問題は、本文にスクリプトを追加できないことです。メソッドrenderHead(Component component, IHeaderResponse response)
はそれを行いません。ポップアップが同じページにポップアップするため (私は推測します)、ヘッドが 1 つしかなく、2 回レンダリングされないからです。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
しません。