6

Chrome で実行する HTML5 アプリを作成していますが、それはローカル ファイル システム上にあります (そのため、HTML ファイルをダブルクリックして起動します)。ファイルシステムにアクセスしようとするとエラーがスローされますが、それはローカル ファイルであるためだと思います。Chromeでこれを許可する方法はありますか?

(注:アプリを永続的に保存することを許可するように求めるポップアップが表示され、「OK」をクリックします。それでもこのエラーがスローされます)

以下のコードはエラーをスローします。

DOMException {message: "NotSupportedError: DOM Exception 9", name: "NotSupportedError", code: 9, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2…}

ファイルtest.html

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <script>
        //File System handler
        window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;

        function onInitFs(fs) {
            console.log('Opened file system: ' + fs.name);
        }

        function errorHandler(e) {
            var msg = '';

            switch (e.code) {
            case FileError.QUOTA_EXCEEDED_ERR:
                msg = 'QUOTA_EXCEEDED_ERR';
                break;
            case FileError.NOT_FOUND_ERR:
                msg = 'NOT_FOUND_ERR';
                break;
            case FileError.SECURITY_ERR:
                msg = 'SECURITY_ERR';
                break;
            case FileError.INVALID_MODIFICATION_ERR:
                msg = 'INVALID_MODIFICATION_ERR';
                break;
            case FileError.INVALID_STATE_ERR:
                msg = 'INVALID_STATE_ERR';
                break;
            default:
                msg = 'Unknown Error';
                break;
            };

            console.log('Error: ' + msg);
        }

        /** THIS CAUSES IT TO THROW AN ERROR */
        window.webkitStorageInfo.requestQuota(window.PERSISTENT, 5*1024*1024, function(grantedBytes) {
                window.requestFileSystem(window.PERSISTENT, grantedBytes, onInitFs, errorHandler);
        }, function(e) {
            console.log('Error', e);
        });
        </script>
    </body>
</html>

代わりに一時ストレージを要求するように変更すると、まだエラーがスローされますが、現在は次のようになりますSECURITY_ERR

window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler);
4

2 に答える 2

4

アプリでユーザーが html ファイルをダブルクリックする必要がある場合、その答えが唯一の方法である可能性があります。ただし、ローカル ファイルにアクセスする必要があるが、そのローカル ファイルへのアクセス方法にある程度の柔軟性がある場合は、小規模なローカル サーバーの作成を検討してください。

Windows では、http-server ( npm install -g http-server) をインストールhttp-serverし、プロジェクト ディレクトリから実行します。Mac/Linux では、python -m SimpleHTTPServerローカル ディレクトリから実行します。ブラウザーで、ローカルでホストされている Web サイトにアクセスします。Windows では使用する必要localhost:8080があり、Mac では使用する必要がありましたlocalhost:8000

この回答に対するすべての功績は、この回答を別の SO question に提供した @orszaczky に帰属します。その回答では、これがセキュリティ上の問題である理由と、--allow-file-access-from-filesフラグの使用が潜在的に危険である理由についても説明しています。

ちなみに、これは Windows と Mac の両方で、Chrome (v49.0) だけでなく、Opera (v35.0) の問題でもあります。

于 2016-03-07T06:39:23.060 に答える