javascript - document.write 在 Youtube videobar 的 javascript 中表现异常

标签 javascript asynchronous youtube-javascript-api

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应该用这个脚本覆盖整个页面内容。但由于某种原因它没有这样做,这让我发疯!

无论哪种方式,我的主要目标都是异步加载此文件。

最佳答案

您应该尝试使用 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?

关于javascript - document.write 在 Youtube videobar 的 javascript 中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799733/

相关文章:

javascript - UIWebView 不使用方法 stringByEvaluatingJavaScriptFromString : 评估 java 脚本

youtube - 无法在 'postMessage' : The target origin provided 'DOMWindow' ) does not match the recipient window's origin ('<URL>' ) 上执行 ('<URL>'

Go lang 中的 Python asyncio 事件循环等价物

c# - 如何用尽 ASP.NET 工作线程来显示异步等待模式的重要性

javascript 正则表达式 match() 结果

javascript - 如何从 api 输出 php 中转义 HTML、JS、PHP 代码?

c# - 任务应该一直等待吗?

iOS YTPlayerView 奇怪的行为

javascript - 对象不支持此操作

javascript - 在 chrome 新窗口上销毁的 php session