【问题标题】:jwPlayer causes rendering not to load in Sitecore's Page EditorjwPlayer 导致渲染无法在 Sitecore 的页面编辑器中加载
【发布时间】:2015-02-16 16:23:06
【问题描述】:

我目前正在使用 Sitecore 7.2 (MVC) 进行渲染,该渲染将显示 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)
}

其他可能有帮助的事情:

  • 当我注释掉上面&lt;script&gt; 标记中的所有内容时,渲染完美地显示出来。
  • 在页面上找到了对 jwplayer.js 的引用(这是我的第一个想法)

Javascript 中的控制台错误:

  • No suitable players found and fallback enabled 在 jwplayer.js 上
  • Uncaught TypeError: undefined is not a functionjwplayer("@vidid").setup({jwplayer('videodiv-@vidid').onPlay(function () { 从上方。

我怎样才能让 jwPlayer 和 Page Editor 相互配合?

【问题讨论】:

  • 控制台中有任何 Javascript 错误吗?您是否使用像 Glass Mapper 这样的 ORM...?如果是这样,可能是附加的 Sitecore 页面编辑器 funk 输出并绑定以使您的字段值可编辑
  • 我正在使用 Glass Mapper。
  • 添加了控制台中的 Javascript 错误。
  • 查看源代码,看看您在 JS 中的字段周围是否有一大堆 &lt;code&gt; 类型元素
  • 我看到了许多&lt;code&gt; 元素,但没有一个在任何 JS 中。

标签: sitecore jwplayer sitecore7 sitecore7.2 page-editor


【解决方案1】:

问题在于,当您通过Page Editor 添加组件时,会在将div &lt;div id="@vidid"&gt; 元素添加到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();

【讨论】:

  • +1 有趣。用if 语句包装不会导致setup() 函数不触发吗?为什么不改用document.onload 或jquery document.ready
  • 是的,if... 将导致 setup() 不会被触发,但只会在页面编辑器中添加组件时触发。保存页面的那一刻,Sitecore 刷新页面,组件已经存在,setup() 被正确触发。 document.onloadready 都可能导致视频加载延迟显着。
【解决方案2】:

我不排除与页面编辑器使用的 JQuery 版本发生冲突 - 这通常会使事情变得混乱。这里有一篇很好的帖子可以解决这些问题。

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

【讨论】:

  • Sitecore 对 jQuery 的使用 应该 范围为 $sc 以避免冲突,但是是的,不排除这种情况存在一些问题最近...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多