script error對於前端開發者相信都不陌生,由於沒有具體錯誤堆疊和**行列號,成為可能是最神秘的錯誤之一。
下面介紹script error產生的原理和解決辦法。
跨域資源引用
假如:abc.com
下的頁面引用了屬於(cdn) 的
demo.js
檔案。 若執行中demo.js
的run()
方法 內部報了乙個異常,那麼前端的錯誤捕獲指令碼,只會檢測到乙個script error
的異常。
這是由於瀏覽器基於安全考慮故意隱藏了其它域js檔案丟擲的具體錯誤資訊。這樣可以有效避免敏感資訊無意中被第三方(不受控制的)指令碼捕獲到,因此,瀏覽器只允許同域下的指令碼捕獲具體的錯誤資訊。具體可以檢視《瀏覽器同源策略以及script error錯誤》。
bool scriptexecutioncontext::sanitizescripterror(string& errormessage, int& linenumber, string& sourceurl)
知道瀏覽器為什麼限制跨域資源引用,解決辦法也不困難。在頁面請求資源時,讓瀏覽器允許我們發起請求,而伺服器(cdn)也允許我們獲取資源,從而得到瀏覽器執行資源的錯誤資訊;這樣分兩步解決。
第一步:給script標籤增加 crossorigin 屬性,讓瀏覽器允許頁面請求資源。
// 以下兩種寫法均可
第二步:給靜態資源響應頭增加允許跨域標記,讓伺服器允許資源返回。
伺服器的http響應頭增加access-control-allow-origin: *
或者access-control-allow-origin:
注:大部分主流cdn預設新增了access-control-allow-origin
屬性。
由於部分瀏覽器對crossorigin屬性不支援,又或者我們無法往http請求響應頭裡面新增跨域屬性,因此依然可能產生script error
。
這時還可以通過try catch
獲取頁面報錯資訊,將js錯誤重新丟擲或者上報。
try catch (e)
本篇文章由一文多發平台artipub自動發布
缺陷調研報告 工廠的缺陷的分析報告及產生原因
精彩文件 鍛造成形過程中的缺陷及其防止方法 一 鋼錠的缺陷 鋼錠有下列主要的缺陷 縮孔和疏鬆 鋼錠中縮孔和疏鬆是不可避免的缺陷,但它們出現的部位可以控制。鋼錠中頂端的保溫冒口,造成鋼液緩慢冷卻和最後凝固的條件,一方面使錠身可以得到冒口中鋼液的補縮,另一方面使縮孔和疏鬆集 中於此處,以便鍛造時切除。偏...
4 諧波 諧波失真以及總諧波失真,諧波產生的原因
指原有頻率的各種倍頻的有害干擾。放大1khz的頻率訊號時會產生2khz的2次諧波和3khz及許多更高次的諧波,理論上此數值越小,失真度越低。由於放大器不夠理想,輸出的訊號除了包含放大了的輸入成分之外,還新添了一些原訊號的2倍 3倍 4倍 甚至更高倍的頻率成分 諧波 致使輸出波形走樣。這種因諧波引起的...
移動型別541(委外業務)不產生會計憑證的原因
1 加工費 frl 2 投入 gbb vbo 3 產出 bsv 標準sap系統對外協541發料時,系統不產生憑證。但是在中國會計制度上要求做財務憑證 借 委託加工物資 貸 原材料 這個憑證如何實現?在網上也有人說把541的配置改為有會計憑證產生,但是新的問題來了。因為sap系統的評估範圍最多明細到工...