0

ローカルホストを必要とせずにローカルで実行できる (file:///C:/... を使用) ことができる webapp (impact js ゲームエンジンで開発) を作成しようとしていますが、chrome で動作させる必要があります。 .

クロムで機能しない主な問題は、CORSの問題により、クロムがメディア(主にpng / jpgの画像)をメディアフォルダーからロードできないようにすることです。

数日間読んでいくつかの方法を試した後、この問題を解決できません。これについて経験のある方は、可能かどうか教えてください。可能であれば、これについてどのような方法をとればよいでしょうか。

私が試した方法:

1) img.crossOrigin = "anonymous" の設定 (失敗、これはまだ chrome によってブロックされています)

2) フラグ --allow-file-access-from-files を指定して chrome を開く (動作しましたが、エンド ユーザーにとって実行可能な方法ではありません)

3) 画像を読み取り、それらをデータ uri 形式に変換する (失敗しました。固有の COR の問題により、データ uri 変換が機能していないようです)

4) appcache を使用してすべての画像をブラウザーのキャッシュにキャッシュしようとしました (失敗しました。Web サーバーからアクセスされていないため、機能していないようです)

更新:Impact.imageソースコードを編集して、画像にロードする時点でsrcをデータURLに変換しようとしています

        load: function( loadCallback ) {

    function getBase64Image(img) {
        // Create an empty canvas element
        var img2 = document.createElement("img");
        var canvas2 = document.createElement("canvas");
        // Copy the image contents to the canvas
        var ctx2 = canvas2.getContext("2d");
        img2.onload = function(){
        canvas2.width = img2.width;
        canvas2.height = img2.height;

            };

        img2.onerror = function() {console.log("Image failed!");};
        img2.src = img + '?' + Date.now();
        ctx2.drawImage(img2, 0, 0, img2.width, img2.height);
        return canvas2.toDataURL("image/png");
    }

    if( this.loaded ) {
        if( loadCallback ) {
            loadCallback( this.path, true );
        }
        return;
    }
    else if( !this.loaded && ig.ready ) {
        this.loadCallback = loadCallback || null;
        this.data = new Image();
        this.data.onload = this.onload.bind(this);
        this.data.onerror = this.onerror.bind(this);
        //this.data.src = ig.prefix + this.path + ig.nocache;
        //old src sets to local file, new src sets to data url generated
        this.data.src = getBase64Image(this.path);

    }
    else {
        ig.addResource( this );
    }

    ig.Image.cache[this.path] = this;
},

何らかの理由で画像が関数にロードされていません。getBase64Image 関数に画像をロードしても機能しますか?

4

1 に答える 1