2016-04-18 9 views
2

websharperで少し遊んで、私のシステムでwebglデモを実行しようとしました。与えられたデモコードをSinglePageアプリケーションで使用できるように変更しました。また、デモで使用したテクスチャを、実際に私のシステム上にあるテクスチャに変更しました。websharper webglデモセキュリティの問題?

let MakeAndBindTexture (gl : WebGL.RenderingContext) f = 
    Img [] 
    |>! Events.OnLoad (fun img ev -> 
     let tex = gl.CreateTexture() 
     gl.ActiveTexture(gl.TEXTURE0) 
     gl.BindTexture(gl.TEXTURE_2D, tex) 
     gl.PixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1) 
     gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img.Dom) 
     gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) 
     gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) 
     f()) 
    |> fun img -> img -< [Attr.Src "mandel.jpg"] // <<-- located in project root 
    |> ignore 

テストもGoogleのクロム、(関与なしWebサーバと - プロジェクトのルートフォルダから実行しているindex.htmlを、私は次のエラーログを取得:成功した一方で、

SinglePageApplication1.min.js:42 Uncaught SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at file:///E:/R/playground/ConsoleApplication7/SinglePageApplication1/mandel.jpg may not be loaded.

マイクロソフトのエッジを実行され、期待される結果を生成します。

今は、もちろん私は他の部分と同じパスに.JPGがGoogleクロームでセキュリティエラーが発生することがありますか、疑問に思う。

また、どういうわけかGoogle Chromeで動作させる機会があるのだろうか...

たとえば、... min.jsファイルの横にある他の場所も、mandel.jpgで試してみました。しかし、すべての場所で同じエラーが発生しました。

答えて

2

クロムは、ローカルWebページin order to protect you from attacks where you may open a malicious webpage locally, for example because someone sent it to you as an email attachmentで非常に厳密な同一起点ポリシーを強制します。

つまり、SinglePageApplication1.min.jsというファイルが信頼できない送信元から送信されたとします。ファイルmandel.jpgを読み込むことを許可する必要がありますか?たぶんあなたはDocumentsフォルダに.jsファイルを入れてしまいました。mandel.jpgは、そこに保管しておいた私的な文書です。だからクロムは言いません、それにアクセスすることはできません。サーブ(

  1. --allow-file-access-from-filesフラグ

  2. ローカルWebサーバ上のSPAをインストールしてChromeを起動することでセキュリティ対策を無効にするか:

    開発目的のために

    、あなたは詳細なhereとして、2つのオプションがありますIIS)にアクセスしてからアクセスしてくださいhttp://localhost/

+0

意味がありますが、私の目には、これは非常にraです彼らが作った決定。だからサーバレスhtmlは大丈夫です... um ... no ...スクリプト読み込み作業...そして... cssファイル読み込み作業...しかし画像をロードする方法はありませんか?彼らは私の意見でそれを乗り越え、ローカルファイルシステムから何かをロードすることを拒否するべきです。 – BitTickler

+0

問題は* who *が読み込み中です。 Chromeは自分のレンダリングエンジン*を信頼して悪意のあるものを実行せずにファイルを読み込んで表示するが、ランダムなスクリプトが本当に何をしているのかは分かりません。つまり、別のファイルを取得する ''タグはうまく表示されますが、スクリプトは画像を直接読み込むことも、そのタグの内容にアクセスすることもできません(原点が異なります)。 – piaste

+0

彼は何を言ったのですか?**使用しないでください! 「SuaveやIISのようなサーバをインストールするのに苦労する必要はありませんLinuxやOSXを使っている場合は、あなたのファイルでフォルダに移動し、 'python -m SimpleHTTPServer'と打ってください。どんなOSであれ、別のオプションは[devd](https://github.com/cortesi/devd)です。スーパーシンプル。小さなファイルで、動作します。 – gman

関連する問題