使用javascript为小部件编写iframe-最佳实践/限制



我正在开发一种第三方小部件(HTML5/js视频播放器(,该小部件设计为可无缝嵌入第三方网站,与Flash播放器配合使用(本例中的HTML5/jss播放器是一种备用(。

为了允许通过单个网关进行外部嵌入,我们提供的嵌入代码大致如下:

<script src="http://example.com/embed.php?id=12345678&width=400&height=300"></script>

注意.php扩展名。这个脚本所做的是执行一些基本的浏览器代理检测,主要基于"id"查询字符串运行一些后端逻辑,然后回显该文档的javascript。将实际嵌入代码写入页面。

如果是启用Flash的设备,document.write代码是直接的<object> Flash嵌入代码(没有iframe;直接指向它们的页面(;如果是iOS设备,它会编写<iframe>,其src指向一个HTML文档,是HTML5/javascript播放器,<head>中有自己的.js,主体中有一组<div>,组成HTML5/js播放器,等等。

我相信这件事可以收拾得更好。所以,我的问题是:

  1. 哪些步骤(如果有的话(可以或应该删除?

  2. 首先将HTML5/js版本放入iframe中,而不是直接将其全部写入页面,这是一个好主意吗?我们在<head>中使用的所需外部.js呢?此外,在未来,我们可能需要与我们的网站(与iframe-src相同的域(进行双向通信,因此iframe提供了一种很好的方式来实现这一点,对吗?

  3. 如果在iframe中加载,是否有任何范围问题需要我担心(例如,我们玩家的jQuery版本与第三方父页面上的内容冲突(?

  4. 我能/应该做些什么来确保正确的加载顺序,这样在脚本加载/执行时就不会对第三方网站产生负面影响吗?

  5. 有没有比使用document.write将最终嵌入代码写入第三方页面更好/更智能的选择(无论是Flash的<object>代码还是HTML5/js的<iframe>代码(?我应该把这段代码写到原始js行中包含的div中吗?还是只记录它。把它写到它所在的任何容器中是安全的?

谢谢!Javascript的范围问题和异步行为从来都不是我的强项。。。

2,3(如果使用iframe,则必须将一个单独的jQuery库加载到该iframe中。这可能是使用iframe(防止版本问题(的充分理由。这样做的代价是在某些情况下不必要地下载两次jQuery。

5( 由于unclenorton提到的原因,应始终避免使用document.write。然而,如果允许用户嵌入它而不需要调用任何JS,那就太好了。需要考虑的一种方法是将他们想要将播放器放入的元素的id传递到脚本标记中。

类似于:<div id='my-video'></div><script src="http://example.com/embed.php?id=12345678&width=400&height=300&nodeId=my-video"></script>

然后,您的脚本可以挂接到DOMReady/onload事件,并使用在没有document.write的情况下构建HTML

// This should be called from an onload handler
document.getElementById('<?= $_GET['nodeId']?>').innerHTML = myHtmlString;

或者通过钻孔createElement appendChild调用

5(是。一般来说,使用document.write是一种不好的做法。它会延迟DOM加载,并阻止浏览器在加载完成之前执行任何其他操作。

相反,可以考虑选择包装器对象(使用getElementById或jQuery选择(,并将其innerHTML(或jQuery html(属性设置为预组装的嵌入代码。

最新更新