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)
}
其他可能有帮助的事情:
- 当我注释掉上面
<script>
标签中的所有内容时,渲染显示完美。
- 在页面上找到对 jwplayer.js 的引用(这是我的第一个想法)
Javascript 中的控制台错误:
No suitable players found and fallback enabled
在 jwplayer.js
Uncaught TypeError: undefined is not a function
在 jwplayer("@vidid").setup({
和 jwplayer('videodiv-@vidid').onPlay(function () {
上面。
如何让 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();
我目前正在 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)
}
其他可能有帮助的事情:
- 当我注释掉上面
<script>
标签中的所有内容时,渲染显示完美。 - 在页面上找到对 jwplayer.js 的引用(这是我的第一个想法)
Javascript 中的控制台错误:
No suitable players found and fallback enabled
在 jwplayer.jsUncaught TypeError: undefined is not a function
在jwplayer("@vidid").setup({
和jwplayer('videodiv-@vidid').onPlay(function () {
上面。
如何让 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();