-1

FireFox の Web ページでローカル画像を使用しようとしています。問題は私が何をしても、セキュリティ メッセージが表示され、画像が読み込まれないことです。

Security Error: Content at http://domain.com/ may not load or link to file:///E:/path/to/file/file.png.

以下の内容をuser.jsFireFox プロファイル ディレクトリにコピーしました。

user_pref("capability.policy.policynames", "localfilelinks");
user_pref("capability.policy.localfilelinks.sites",  'http://domain.com');
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");

私がやりたいことは、css ファイルを追加し、それをページのスタイリングに使用することです。

編集: HTTP 応答を変更し、リモートの css ファイルをローカルの css ファイルに置き換える拡張機能を作成しました。しかし、私が言ったように、Firefox はローカルの css ファイルの読み込みを妨げます。

編集 2この質問からタグを 削除しない
でください。firefox-addon

4

3 に答える 3

2

これを行わないでください -file://プロトコルへのアクセスは何らかの理由でロックダウンされています。画像をローカル データに置き換えることが目的の場合は、プロトコルを使用しないでくださいfile://。他にも利用可能なプロトコルがたくさんあります。たとえば、data:プロトコルを使用できます。data:これはURLとしての SO アイコンです。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAABrUlEQVR42mNkwAOepOgxMTD9mwhk5gDxQSB2l5l15SeyGkYGAuBJMtAQ5n%2BrgcwgIF4ENCCeJAOghvADXbIHqNoEyK0BGtKK14DXU9lAThZiYPw%2FXTTr92uId3SVgKoPA8WkgNxIoCErsBrwdhoL57%2F%2FTGeATC0gfgVUMRlo%2B2zRjD8vn6RrmzH8ZT4E5IOU%2BgAN2YNhwMOJ%2FEy8bJ%2BVgGYnAQ3K%2Ff%2BfkQco%2FAYYDjP%2BfeHs%2FfNQyub%2FN44NQJe0ysy5VI83DF5M5pRkY%2FmVyfCfIRtomNB%2Fpv9v%2F%2F9infbnucgZ5l%2FMW8T7HvxDMWB9hT3nXwbmrH% 2F%2FmO4Bubc4Wb%2Ff9W09%2BuNmjwQPP%2FvHNHaWXwX%2FGf7LsjD9k%2BFLZ3iKEQYbKmy1%2FjKwXIXx%2F%2F1nfPvvP%2FMVJsZ%2FRzlYfpwX4nj%2FT5zrNbtK8evlWGNhcYU3Px%2FDR%2Bf%2FDExGQK4pEKsCseJ%2FoDKgF0AGMvxjZLIP79xzCMWA3Jyc%2FyB68pQpGGEyuyJEhJXhtwYLELMx%2FNL9wcDRcfqLwjOYegwDYGxcAFkNbQxgIALgNIBUQBUDAFi2whGNUZ3eAAAAAElFTkSuQmCC

この URL は簡単に生成されます。

var url = "data:image/png;base64," + btoa(imageData);

resource://または、 を使用してディスク上のディレクトリにマップできる URL を使用することもできますnsIResProtocolHandlerが、それはより複雑です。マップされたディレクトリのすべてのコンテンツが、すべての Web サイトからアクセス可能になることに注意してください。機密情報が含まれていないことを確認する必要があります。

質問者:* リンクの内容を追加しました:

var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                          .getService(Components.interfaces.nsIIOService);
var resProt = ioService.getProtocolHandler("resource")
                       .QueryInterface(Components.interfaces.nsIResProtocolHandler);

var aliasFile = Components.classes["@mozilla.org/file/local;1"]
                          .createInstance(Components.interfaces.nsILocalFile);
aliasFile.initWithPath("/some/absolute/path");

var aliasURI = ioService.newFileURI(aliasFile);
resProt.setSubstitution("myalias", aliasURI);

// assuming the code modules are in the alias folder itself
于 2012-10-05T14:04:48.977 に答える
0

努力する価値があるとは思えませんがhttpd.js、XPCOM コンポーネントとして使用することはできます。

編集:アドオンSDKが提供することに気づきましたhttpd.js

于 2012-10-07T17:57:59.390 に答える
0

それは正しいです。ユーザーのファイルシステムから直接イメージを使用しようとすると、セキュリティ上の脆弱性が生じます。新しいブラウザーには FileReader API が実装されており、ユーザーのファイルに安全にアクセスできます。

以下にいくつかの例を示します。

http://www.html5rocks.com/en/tutorials/file/dndfiles/

http://html5demos.com/file-api

于 2012-10-05T12:16:26.507 に答える