我正在尝试编写一个简单的Greasemonkey脚本,但是作为Javascript的初学者和Greasemonkey的新手,我一直遇到问题。这里是我到目前为止的代码:jquery.ready没有从Greasemonkey脚本中调用
// ==UserScript==
// @name TEDToYoutube
// @include http://www.ted.com/talks/*.html
// @exclude http://www.ted.com/talks/*.html?*
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @run-at document-start
// @grant none
// @namespace abiteasier.in
// ==/UserScript==
var url = window.location.href;
var talk_name = url.split("/").pop();
talk_name = talk_name.substring(0, talk_name.lastIndexOf('.html'));
var youtube_search_url = 'http://www.youtube.com/user/TEDtalksDirector/search?query=' + talk_name;
window.location.href = youtube_search_url;
$(document).ready(function() {
alert("called");
var a = $("li.channels-browse-content-list-item");
alert(a.length());
});
正如你可能已经推断出,该脚本是从TED演讲页面重定向到其对应的Youtube视频。我有搜索工作,搜索页面加载正常,但.ready函数似乎从未触发。这是由于上面的@ run-at引起的一个问题,Greasemonkey是否只将原始TED页面或我们通过脚本访问的每个页面应用于此?或者脚本中的其他地方出现问题?
更新:好的,我想过这个,我能想到的最合理的逻辑是,一旦URL改变,GM就会停止执行这个脚本。我会尝试在GM文档中进行验证,如果您对该领域有所了解,请发表回复或评论。
更新2:我通过在@include的YouTube页面固定的问题,代码是http://userscripts.org/scripts/show/174390如果任何人的好奇。
嗨,感谢您的回复,正如更新中提到的那样,我在这里猜测原因1并根据该原则改变了脚本,然后开始工作(http://userscripts.org/scripts/show/ 174390)。 2中提到的冲突似乎没有发生,也许是因为我需要最新版本的jQuery,与TED相同(不确定YouTube使用哪个版本(如果有的话))。 – sundar
不会。冲突肯定会发生。您正在从TED(1.7.1)申请不同版本的jQ(1.10.2),您的jQ副本已被页面取代,并且它是纯粹的运气**,您的脚本没有破坏任何明显的(还)在任何一个网站上。 –
我已经上传了一个带有@grant请求的新版本来启用沙盒,但是我想知道:因为你提到这个jQuery已经被他们所取代,那么脚本怎么会在他们的网站上破坏一些东西呢?我理解脚本本身在他们的jQuery版本没有脚本期望的东西时可能会有问题,但是网站自己的javascript会受到怎样的影响? – sundar