window.URL 與 跨域

跨域

關(guān)于跨域問(wèn)題,簡(jiǎn)單來(lái)說(shuō)就是通過(guò)地址訪問(wèn)資源時(shí),所用的協(xié)議不同導(dǎo)致無(wú)法訪問(wèn)目標(biāo)。

網(wǎng)上已經(jīng)有很多關(guān)于跨域的主流解決辦法,我這里就說(shuō)說(shuō)很少會(huì)想到用到的辦法。


問(wèn)題

先看看一個(gè)具體的小問(wèn)題:

我需要將用戶上傳的本地 FBX 模型文件,利用 THREE.JS 的 放在 Canvas 中展示,而瀏覽器會(huì)給出一個(gè)跨域的報(bào)錯(cuò):

three.js:34066 
Access to XMLHttpRequest at 'file:///Users/UserName/Downloads/three.js-
dev/examples/models/fbx/SambaDancing.fbx'  from origin 'null' has been 
blocked by CORS policy:  Cross origin requests are only supported for 
protocol schemes: http, data, chrome, chrome-extension, https.

這個(gè)問(wèn)題一種解決方法是:可以通過(guò)將協(xié)議統(tǒng)一為 HTTP 來(lái)解決,具體不講。

有時(shí)候我們無(wú)法轉(zhuǎn)換協(xié)議或者更改其它設(shè)置的時(shí)候,可以利用 window.URL.createObjectURL() 這個(gè)方法。


window.URL

console.log(window.URL);

URL.createObjectURL() 靜態(tài)方法會(huì)創(chuàng)建一個(gè) DOMString,其中包含一個(gè)表示參數(shù)中給出的對(duì)象的URL。這個(gè) URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定。這個(gè)新的URL 對(duì)象表示指定的 File 對(duì)象或 Blob 對(duì)象。

我們可以監(jiān)聽 input[type="file"]onchange 事件,將文件讀出來(lái),然后傳入上述方法:

// ...
const file = file[0];
const url = URL.createObjectURL(file);
// ...

這個(gè)可以用在很多需要解決跨域的地方。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,770評(píng)論 1 45
  • 轉(zhuǎn)載自:https://segmentfault.com/a/1190000007326671bo 前端跨域整理 ...
    天字一等閱讀 523評(píng)論 0 3
  • 1. 什么是跨域? 跨域一詞從字面意思看,就是跨域名嘛,但實(shí)際上跨域的范圍絕對(duì)不止那么狹隘。具體概念如下:只要協(xié)議...
    w_zhuan閱讀 620評(píng)論 0 0
  • 原文地址:原文地址 什么是跨域? 跨域是指一個(gè)域下的文檔或腳本試圖去請(qǐng)求另一個(gè)域下的資源,這里跨域是廣義的。 廣義...
    C_Y大漁閱讀 1,299評(píng)論 1 13
  • 2017年3月18日星期六,一個(gè)很平常的日子,與四、五個(gè)同事心血來(lái)潮的約定了一件事情:就是每天走步(微信運(yùn)動(dòng))達(dá)5...
    茶來(lái)茶去閱讀 165評(píng)論 0 0

友情鏈接更多精彩內(nèi)容