【发布时间】:2015-10-10 09:49:26
【问题描述】:
我正在使用 GM 为网站编写自定义脚本。该脚本在页面中添加了一个嵌入的 Youtube 播放器,所以我调用了 Youtube API。这是代码的开头:
// ==UserScript==
// @author mens
// @match http://thewebsite.com
// @grant none
// ==/UserScript==
///////////// YOUTUBE
// API
var player;
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// API loaded
window.onYouTubeIframeAPIReady = function()
{
console.log("API loaded");
}
使用此代码,一切正常。前几行调用 API,加载后触发 onYouTubeIframeAPIReady,然后在我的脚本中生成 player。
您会注意到@grant 设置为none。问题是当我改变这条线时,即使是最轻微的。我使用GM_getResourceURL 访问外部文件(如图形)。
所以当我设置时:
// @grant GM_getResourceURL
...API 不再工作:onYouTubeIframeAPIReady 永远不会被调用!
根据我在 GM 文档中收集的信息,@grant none 是默认模式,这意味着对代码中使用的所有 API 的最大访问权限。更改 @grant 时可能会出现更多限制...我认为这是问题的一部分,但我不知道如何处理它。
感谢您的帮助!!
【问题讨论】:
-
您是否考虑过使用
@require来代替插入script标签? -
是的,我试过了,然后我得到一个错误:
Uncaught TypeError: YT.Player is not a function... 用于创建播放器的 YT 对象似乎没有完全加载 -
问题谁的答案将解决这个问题stackoverflow.com/questions/13485122/…(但技术上不是重复的)
标签: javascript youtube