当我访问www.reuters.com时,我无法弄清楚为什么这至少不会提醒我一次。我错过了什么吗?
// ==UserScript==
// @name test3
// @namespace test3
// @version 1
// ==/UserScript==
$(document).ready(function () {
var actualHost = window.location.toString();
var intendedHost = "www.reuters.com";
alert("Debug 1 - " + actualHost);
if (actualHost == intendedHost) {
alert("Debug 2 - " + actualHost);
}
});
谢谢。
答案 0 :(得分:7)
$(document).ready()
为Greasemonkey fires at the appropriate time。因此最简单的脚本版本变为:
// ==UserScript==
// @name test3
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.
var actualHost = window.location.toString();
var intendedHost = "www.reuters.com";
alert("Debug 1 - " + actualHost);
if (actualHost == intendedHost) {
alert("Debug 2 - " + actualHost);
}
注意:
尽可能使用@require
(几乎总是如此)。
@require
会在本地计算机上放置脚本的副本,因此您的脚本运行速度更快,并且每次运行都不依赖于外部服务器。@require
维护沙箱安全/分离,因此您的脚本可以免受来自目标页面的副作用或攻击@require
也会让您的脚本正常运行 - 这是一种非常有价值的技术。@require
甚至是Chrome的端口
醇>
添加jQuery的其他复杂方法存在多个问题:
始终为您的脚本提供适当的@include
, @exclude
, and/or @match
directives,以便它只能在所需的页面上运行。
考虑使用console.log()
代替alert()
。它对调试的干扰要小得多。
答案 1 :(得分:1)
不起作用是一个非常糟糕的问题描述..
无论如何,我在这里看到一个问题。试试这个:
// ==UserScript==
// @name test3
// @namespace test3
// @version 1
// @include *reuters.com*
// ==/UserScript==
loadDependancies(function () {
var actualHost = unsafeWindow.location.toString();
var intendedHost = "www.reuters.com";
alert("Debug 1 - " + actualHost);
if (actualHost == intendedHost) {
alert("Debug 2 - " + actualHost);
}
});
您需要使用@include
指令告诉GM应该运行脚本的位置。
您应该使用unsafeWindow
来访问该页面的窗口对象
如果页面上还没有jquery,你还需要加载jquery:
DEBUG = true
function addScript(url){
var s = document.createElement('script');
s.src = url;
s.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(s);
}
function log(msg){
if(DEBUG){
unsafeWindow.console && unsafeWindow.console.log(msg);
}
}
function loadDependancies(boostrapFn) {
addScript('jquery CDN url goes here..');
var check = function(){
log("waiting for dependancies to load: "+ typeof unsafeWindow.jQuery);
if(typeof unsafeWindow.jQuery == 'undefined'){
window.setTimeout(check, 500);
} else {
jQuery = $ = unsafeWindow.jQuery;
boostrapFn();
}
}
check();
}
这就是你的新剧本。它会加载jquery供你使用