【问题标题】:document.write is behaving weirdly in Youtube videobar's javascriptdocument.write 在 Youtube videobar 的 javascript 中表现异常
【发布时间】:2012-12-10 23:35:22
【问题描述】:

Youtube 的 Videobar 是一个过时的小部件。 Google 仍在提供 js,但文档和链接已从他们的网站上删除。您可以在以下位置查看运行示例:sicmaui.com(右侧,youtube 选项卡)

它目前正在使用 html 上的脚本标签加载

<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&source=uds-vbw" type="text/javascript"></script>
GSearch.setOnLoadCallback(somefunction); //works

但是当我尝试使用以下代码加载它时它不起作用

var $script = $('<script></script>').attr('src', src).bind('load', function(){
GSearch.setOnLoadCallback(somefunction); //GSearch is undefined
});
$('head')[0].appendChild($script[0]);

现在 js 的加载非常好。但是变量是未定义的。 我挖掘了谷歌的 js,发现后来它使用这个代码加载了另一个 js 文件:

google.loader.writeLoadTag("script", google.loader.ServiceBase + "/api/search/1.0/8c68537a8c14de310f268bd7f81c9c67/default+en.I.js", false);

调用(其中 'n' 等于文档)

n.write('<script src="' + b + '" type="text/javascript"><\/script>')

现在理想情况下,这个 js 应该用这个脚本覆盖整个页面内容。但由于某种原因,它没有这样做,这让我发疯了!

不管怎样,我的主要目标是异步加载这个文件。

【问题讨论】:

    标签: javascript asynchronous youtube-javascript-api


    【解决方案1】:

    您应该尝试使用jQuery's getScript;它处理所有你不想参与的混乱:添加async 属性,定义readystatechangeload 事件处理程序,避免内存泄漏,...

    编辑:

    至于你的根本问题:如果你异步加载它,我认为你不能让这个脚本工作。 document.write 本质上是同步的。请参阅此相关问题:Warning: A call to document.write() from an asynchronously-loaded external script was ignored. How is this fixed?

    【讨论】:

    • 我也试过了。还是一样。我似乎无法弄清楚为什么谷歌代码中的 n.write (document.write) 不能正常工作。
    • 是的,对不起,我应该更彻底地阅读你的问题;查看我编辑的答案。
    • 啊..这解释了奇怪的行为!感谢 Julien 解决了这个问题
    猜你喜欢
    • 2014-06-09
    • 2019-09-20
    • 2012-10-11
    • 2011-06-06
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多