用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
測試它與谷歌Chrome,(不涉及網絡服務器 - 運行從項目的根文件夾中的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格式如何可能會導致谷歌瀏覽器的安全性錯誤。
另外,我想知道我是否有機會使它在谷歌瀏覽器中運行,不知何故...
我也嘗試mandel.jpg的其他位置,例如... min.js文件旁邊。但所有地點都產生相同的錯誤。
有道理 - 答案但在我眼裏,這是一個非常ra ndom做出的決定。因此,無服務器的HTML是好的,直到它加載...嗯...不...腳本加載工程...和... CSS文件加載工作...但沒有辦法加載圖像?我認爲他們應該克服它,並拒絕從本地文件系統加載任何東西。 – BitTickler
問題是*誰正在做加載。 Chrome相信*自己的渲染引擎*可以加載和顯示文件,而不會做任何惡意的事情,但是它不知道一些隨機腳本真的在做什麼。所以''標籤來源不同的文件將顯示得很好,但腳本既不能直接加載圖像,也不能訪問該標籤(它有不同的來源)的內容。 – piaste
他說什麼,但**不要使用該標誌!有一個原因是存在的*「你不需要爲安裝像Suave或IIS這樣的服務器而付出巨大的痛苦,如果你在linux或OSX上,只需用你的文件cd到文件夾並鍵入'python -m SimpleHTTPServer'。在任何操作系統上,另一個選項是[devd](https://github.com/cortesi/devd)。超級簡單。一個小文件,它只是起作用。 – gman