1

何らかの理由で、ISPが次のURLをブロックしています。

http://assets.tumblr.com/javascript/prototype_and_effects.js

Chromeコンソールの状態:

Failed to load resource: the server responded with a status of 403 (URLBlocked)

その結果、多くの関数がこのスクリプトに依存しているため、Tumblrを適切に使用できません。私はすでにISPに連絡して、このURLのブロックを停止するように依頼しましたが、その間に何かしたいと思います。

このリソースを外部にロードするにはどうすればよいですか?それは、ブックマークレットソリューション、userscript / Greasemonkey、またはその他の考えられるものである可能性があります。

4

1 に答える 1

2

403ステータスは、サーバー(assets.tumblr.com)がISPではなくリクエストをブロックしたことを意味します。サーバーがこれを行う最も一般的な理由は、(a)十分なアクセス権でログインしていないため、および/または(b)サーバーが必要なリファラーヘッダーおよび/またはCookieを受信しなかったため、および/または(c )リクエストは、サーバーがブラックリストに登録したIPアドレスから送信されました。プロキシサーバーを使用すると、一部のサイトでこれらのいずれかまたはすべてをトリガーできます。

これは、ユーザーまたはプロキシサーバーがそのファイルからブロックされている場合、ユーザースクリプトが使用するリモートJavaScriptを挿入する標準的な方法もブロックされることを意味します。

このGreasemonkeyを回避するために、ローカルコピーからjavascriptファイルを埋め戻すことができます。これをする:

  1. Insure Tumbler has prototype.user.js以下に示すように、ファイルを作成します。tempマシン上のフォルダにないディレクトリに配置します。
  2. 参照したprototype_and_effects.jsファイルをダウンロードして、同じフォルダーに配置します。別の(またはプロキシなしの)、または別のブラウザプロファイルなどを使用する必要がある場合があります。(私にとっては、直前のリンクを右クリックするだけで、問題なくダウンロードできます。)
  3. Greasemonkeyを使用してスクリプトをインストールします。(Firefox:ファイル->開くCtrlO)が機能します。)
  4. Prototypeスクリプトはとライブラリをテストし、Effectライブラリがない場合はローカルにロードします。Tumblrを再び機能させるにはさらに必要な場合がありますが、そうであれば、それはこの質問の範囲を超えています。
  5. 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.");
}
于 2013-01-15T20:08:08.540 に答える