gpt4 book ai didi

javascript - 带有Grease Monkey的Javascript:@grant弄乱了YouTube API

转载 作者:行者123 更新时间:2023-12-03 06:22:08 25 4
gpt4 key购买 nike

我正在使用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时,可能会出现更多限制...我认为这是问题的一部分,但我不知道如何使用它。

谢谢你的帮助 !!

最佳答案

因此,技巧很简单(但很神秘):我通过重命名功能将window更改为unsafeWindow:

unsafeWindow.onYouTubeIframeAPIReady = function()
{
console.log("API loaded");
}

来自GM文件:

unsafeWindow

The unsafeWindow object provides full access to the pages javascript functions and variables.



似乎除了 @grant以外的任何 none都将 window对象放入沙箱中,并且无法从外部API进行访问。我仍然不确定如何正确设置这些限制,但是 unsafeWindow完全绕开了它们。

关于javascript - 带有Grease Monkey的Javascript:@grant弄乱了YouTube API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33044007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com