如何将脚本添加到正文(类似的功能,如方法renderHead(组件组件,IHeaderResponse响应))

Kri*_*ter 5 wicket

使用以下代码,我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>
Run Code Online (Sandbox Code Playgroud)

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',
                     ...:...
                                  ..
                };
");
        }     
             }
Run Code Online (Sandbox Code Playgroud)

renderHead-method 将追踪像素添加到主页面.右键单击页面 - > source coude显示以下脚本已添加到页面中:

<script type="text/javascript" >

Wicket.Event.add(window, "domready", function(event) {      
            WebtrekkInstance = {
             ..   
                         'path' : 'anyPath',
                 ...:...
                              ..
            };
                        ..            
            ;});
</script>
Run Code Online (Sandbox Code Playgroud)

现在我想将trackingpexil添加到一些弹出窗口中.我的问题是renderHead(Component component, IHeaderResponse response).该方法WebMarkupContainer不会这样做,因为(我想因为弹出窗口弹出到同一页面,所以只有一个头,它不会渲染两次).所以我试着这样做,add(scriptContainer);如下所示.

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();
    }      
}
Run Code Online (Sandbox Code Playgroud)

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
 }
Run Code Online (Sandbox Code Playgroud)

这里的问题是我无法添加scriptContainer. OurServicePopupPixel不会起作用,因为OurServicePopupPixel是行为而不是页面.

jor*_*deu 5

也许您可以简单地使用Label带有setEscapeModelStrings(false). 不过好像有点奇怪。

我没有完全理解你的 javascript 在做什么,但也许你可以在 DOM 准备好时尝试执行它。使用renderHead这样的:

public void renderHead(IHeaderResponse response) {
    response.render(OnDomReadyHeaderItem.forScript( ... YOUR SCRIPT HERE ... ));
}
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。