jwPlayer 导致渲染无法在 Sitecore 的页面编辑器中加载

jwPlayer causes rendering not to load in Sitecore's Page Editor

我目前正在 Sitecore 7.2 (MVC) 中进行渲染,它将显示给定 link 视频的 jwPlayer(在媒体库中或来自外部源,如 YouTube)。当我通过内容编辑器中的演示详细信息添加渲染(使用有效数据源)时,一切看起来都很好,并且运行良好。不过,我现在 运行 遇到的麻烦是,当我尝试从页面编辑器(使用完全相同的呈现和数据源)做同样的事情时,占位符中没有显示任何内容全部.

渲染中处理视频的部分如下:

@if (Model.VideoLink != null && Model.Image != null)
{
    var vidid = Guid.NewGuid().ToString();
    <div class="article-video-module">
        <p class="video-placeholder-text">@Html.Raw(Model.Heading)</p>
        <div id="@vidid">Loading the player...</div>
        <script type="text/javascript">
            jwplayer("@vidid").setup({
                file: "@Model.VideoLink.Url",
                image: "@Model.Image.Src",
                width: "100%",
                aspectratio: "16:9",
                sharing: {
                    link: "@Model.VideoLink.Url"
                },
                primary: 'flash'
            });
            jwplayer('videodiv-@vidid').onPlay(function () {
                $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').hide();
            });
            jwplayer('videodiv-@vidid').onPause(function () {
                $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').show();
            });
        </script>
    </div>

    @Editable(a => Model.Description)
}

其他可能有帮助的事情:

Javascript 中的控制台错误:

如何让 jwPlayer 和 Page Editor 很好地协同工作?

我不排除与页面编辑器使用的 JQuery 版本发生冲突的可能性——这通常会把事情搞砸。这里有一个很好的 post 来解决这些问题。

http://jrodsmitty.github.io/blog/2014/11/12/resolving-jquery-conflicts-in-page-editor/

问题是,当您通过 Page Editor 添加组件时,脚本会在 div <div id="@vidid"> 元素添加到 DOM 之前触发。不要问我为什么...

解决方案非常简单:用 if 条件包装您的 javascript 代码,检查 div 是否已经存在:

<script type="text/javascript">
    if (document.getElementById("@vidid")) {
        jwplayer("@vidid").setup({
            file: "@Model.VideoLink.Url",
            image: "@Model.Image.Src",
            width: "100%",
            aspectratio: "16:9",
            sharing: {
                link: "@Model.VideoLink.Url"
            },
            primary: 'flash'
        });
        jwplayer('videodiv-@vidid').onPlay(function () {
            $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').hide();
        });
        jwplayer('videodiv-@vidid').onPause(function () {
            $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').show();
        });
    }
</script>

您的代码还有另一个问题 - Guid 可以数字开头,这不是 html 元素的有效 ID。您应该将代码更改为:

var vidid = "jwp-" + Guid.NewGuid().ToString();