錯誤監控作為開發日常的工作保證,但卻經常在錯誤平台看到的是這種莫明其妙,少得可憐的錯誤資訊,讓人無從下手
引出script error
錯誤,是由於瀏覽器的同源策略,對於跨域的指令碼捕獲的錯誤,只會輸出如此簡短一句;
既然是同源策略,就祭出cors
寶典,給js
請求返回access-control-allow-origin: *
,就可以解決了;
瀏覽器在同源策略限制下,出於安全上的考慮,頁面無許可權獲取異常詳情, 只輸出script error
的錯誤資訊。
在 webkit 的原始碼裡可以看到script error
的輸出過程,從下面的**看到,
canincludeerrordetails
判斷origin
請求頭是不是同源
dispatcherrorevent
丟擲錯誤詳情,丟擲方式由上面的同源與否來決定
bool scriptexecutioncontext::dispatcherrorevent(const string& errormessage, int linenumber, int columnnumber, const string& sourceurl, jsc::exception* exception, cachedscript* cachedscript)
); else
errorevent = errorevent::create("script error."_s, , 0, 0, );
// other code }
// fixme: should this function be in securitycontext or securityorigin instead?
bool scriptexecutioncontext::canincludeerrordetails(cachedscript* script, const string& sourceurl)
return securityorigin()->canrequest(completeurl(sourceurl));
}複製**
其實很簡單,給js請求返回access-control-allow-origin: *
,瀏覽器就能正常通過window.onerror
來捕獲詳細的錯誤鳥~
nginx上的配置
location ~* \.js$
複製**
如何根據請求源,動態判斷要不要返回access-control-allow-origin
呢
正常情況下,跨域js請求是不會傳送origin
請求頭,我們在script
標籤裡加上crossorigin
屬性就可以使瀏覽器傳送了。 然後伺服器就可以根據origin
頭部來判斷來者何人鳥
複製**
為什麼那麼多「偽需求」?
為什麼有那麼多 偽需求 做產品或做工具,經常碰到 偽需求 的問題,其實業界早有定論,使用者說不清楚自己的需求是什麼?有兩個流行的著名故事,第乙個故事,在汽車出現之前,福特去調研使用者,眾多使用者表示 我們需要一輛更快的馬車 第二個故事,大學城邊酒店林立,競爭激烈,其中一家的酒店老闆開始使用者調研,每...
為什麼華為加班那麼多
為什麼華為加班那麼多?十年前,pc機 個人電腦 的記憶體還是256k,512k為主流,再往前,記憶體就更小了。為了節省空間,編寫的程式都是很精練的。是否還記得有這樣一道演算法題 不用額外的變數,交換兩個變數的值。連乙個臨時變數的空間都節省了。現在的pc機記憶體已是4g,8g為主流了,伺服器的記憶體就...
為什麼存在那麼多光棍
調查物件 28歲 35歲的100名單身男女 男女各50名 學歷從中專至研究生 職業 公務員 教師 營業員 自由職業者 警察等。調查方式 發放問卷100份調查問卷 調查形式 街頭隨機調查 網路調查 調查 調查結論 50名被調查男性中,27 的人認為,自己沒有女朋友的原因是,現在的女孩都是 野蠻女友 她...