403 状态意味着服务器(assets.tumblr.com) 阻止了请求,而不是您的 ISP。服务器这样做的最常见原因是(a)因为您没有以足够的访问权限登录,和/或(b)服务器没有收到它想要的引荐来源标头和/或 cookie,和/或(c ) 请求来自服务器已列入黑名单的 IP 地址。使用代理服务器可以为某些站点触发任何或所有这些。
这意味着,如果您或您的代理服务器被阻止访问该文件,那么用户脚本将使用的注入远程 javascript 的标准方法也将被阻止。
为了解决这个问题,Greasemonkey 可以从本地副本回填 javascript 文件。去做这个:
- 创建文件,
Insure Tumbler has prototype.user.js
,如下所示。将它放在不在temp
您机器上的文件夹中的目录中。
- 下载您引用的
prototype_and_effects.js
文件并将其放在同一文件夹中。您可能必须使用不同的(或不使用代理)或不同的浏览器配置文件,或其他任何东西。(对我来说,它下载得很好,只需右键单击前面的链接。)
- 使用 Greasemonkey 安装脚本。(Firefox:文件->打开( CtrlO) 将起作用。)
- 该脚本测试
Prototype
和Effect
库,如果缺少一个,则在本地加载它们。让 Tumblr 再次工作可能需要更多,但如果是这样,那超出了这个问题的范围。
- 在 Firefox+Greasemonkey 中工作。应该在 Chrome+Tampermonkey 中工作(未测试),在不支持的地方
@resource
不起作用,例如直接 Chrome。
// ==UserScript==
// @name _Backfill Prototype and Effect libraries on Tumblr pages
// @match http://tumblr.com/*
// @match http://www.tumblr.com/*
// @match https://tumblr.com/*
// @match https://www.tumblr.com/*
// @resource PandE_src prototype_and_effects.js
// @grant GM_getResourceText
// ==/UserScript==
//-- Does this page load prototype_and_effects.js?
var protoScriptNode = document.querySelector ("script[src*='prototype_and_effects']");
if (protoScriptNode) {
//console.log ("Page uses prototype_and_effects.js.");
//-- Are Prototype and Effects loaded?
var P = unsafeWindow.Prototype;
var E = unsafeWindow.Effect;
if (P && P.Version && E && E.BlindDown) {
//console.log ("Everything's loaded, no action needed.");
}
else {
//console.log ("Loading prototype_and_effects.js");
var PandE_src = GM_getResourceText ("PandE_src");
var scriptNode = document.createElement ('script');
scriptNode.type = "text/javascript";
scriptNode.textContent = PandE_src;
var targ = document.getElementsByTagName ('head')[0];
targ.appendChild (scriptNode);
}
}
else {
//-- No action needed
//console.log ("Page doesn't use prototype_and_effects.js.");
}