3

裏話

私は、GreaseMonkeyとGoogleChromeの両方で使用することを目的とした特殊な画像インラインスクリプトを作成しました。PNGファイルをダウンロードし、画像属性のdata:URLに保存することになっています。srcこれはばかげているように聞こえるかもしれませんが、特定のWebサイトは画像用に設定Content-Dispositionattachmentれており、「名前を付けて保存」ダイアログが毎回ポップアップすることを望んでいません。

実際の質問

スクリプトは、を使用してデータをフェッチし、XMLHttpRequestbase64にエンコードして、適切な場所に保存します。これまでのところ、良いです。ただし、FirebugとChrome開発コンソールの両方で実行した場合にのみ機能し、適切なユーザースクリプトとして使用した場合には機能しません。私が理解している限り、これは、Greasemonkeyスクリプトがオブジェクトを直接使用できず、代わりXMLHttpRequestにへの呼び出しに依存する必要があるためです。GM_xmlhttpRequestただし、またはそのように設定responseTypeすることはできず、パラメーターはPOST要求を介してデータを送信する場合にのみ機能するようです。Unicode文字列しか取得できません。"blob""arraybuffer"binary

念のため、画像はそれらにリンクしているページと同じドメインから提供されます。私はそれが「同一生成元」のものを満足させると信じています。

http://wiki.greasespot.net/GM_xmlhttpRequestここにGM_xmlhttpRequestドキュメントがあります。

arraybufferGreasemonkeyユーザースクリプト内からをフェッチする方法はありますか?

4

2 に答える 2

2

同じドメインであればXMLHttpRequest問題なく使用できます。使用する唯一の理由GM_xmlhttpRequest(現在、機能の不自由なサブセットがあります)は、画像/ファイルがクロスドメインである場合です。

同じドメインの場合、この回答に示されているようにXHR2を使用できます。

クロスドメインの場合、次のことを行う必要があります。を使用GM_xmlhttpRequestし、mime-typeをオーバーライドし、カスタムエンコーダアルゴリズムを使用します。繰り返しますが、これはすべて同じ答えに示されています


ただし、画像のダウンロードを簡単にしようとしているようですね。その場合は、優れたDownThemAll拡張機能を使用する方がよい場合があります。

于 2012-05-29T01:38:14.367 に答える
0

overrideMimeType文字列(互換性:0.6.8+)オプション。リクエストで指定するMIMEタイプ(例: "text / html; charset = ISO-8859-1")。

これをplain/text; charset=x-user-defined(タイプは関係ありませんが、文字セットは関係あります)に設定し、応答文字列をビット単位でANDして、型付き配列に値を追加し、バッファーを取得できます。

var text = xhr.responseText,
    len = text.length,
    arr = new Uint8Array(len),
    i = 0;

    for( i = 0; i < len; ++i ) {
        arr[i] = text.charCodeAt(i) & 0xFF;
    }

    arr.buffer //The arraybuffer

注:これは、base64ではなく、生のバイナリ応答用です。

于 2012-05-28T15:18:36.900 に答える