亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以安全地依賴主機名只為本地文件未定義(即導航到本地文件)嗎?

我可以安全地依賴主機名只為本地文件未定義(即導航到本地文件)嗎?

慕虎7371278 2021-12-23 10:35:44
我正在創建一個在每個頁面上運行但僅在某些上下文中工作的網絡擴展。這是 isSupported() 方法:// return a boolean value that is true if the domain/page is supported, element name matches// supported types, and content is marked as spell checkablefunction isSupported (node, hostname) {  const supportedNodeNames = ['TEXTAREA', 'DIV']  const supportedDomains = ['mail.google.com', 'github.com']  if (node.spellcheck && node.isContentEditable) {    if (node.nodeName === 'TEXTAREA') {      return true    }    if (supportedNodeNames.contains(node.nodeName) && supportedDomains.contains(hostname)) {      return true    }  }  return false}不幸的是,這段代碼會阻止擴展程序在我的本地測試頁面上運行,即當 URI 為 file:///home/username/github/multi-dict/test_page/test-page.html我可以安全地依賴window.location.hostname未定義*并允許擴展在它出現時運行嗎?我檢查了MDN 上的文檔和規范,但我不太清楚在什么確切的上下文中主機名是未定義的。提前致謝!*它實際上是一個空字符串,保留在讀者/答案上下文的原始描述中。所以問題是 - 我可以安全地依賴window.location.hostname瀏覽器打開的本地文件是否為空 - 沒有本地網絡服務器正在運行。
查看完整描述

1 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

hostname被定義為字符串(MDN,spec),因此它不能具有 value undefined。在我嘗試過的每個瀏覽器(Chrome、Firefox、IE、Edge)上"",它都是一個空字符串 ( ),而不是undefined。如果你認為它undefined在某些瀏覽器上,你可以做一個虛假檢查:


if (location.hostname) {

    // It has a non-blank value

} else {

    // Its value is falsy (probably "", perhaps undefined)

}

但我認為它永遠不會undefined。從規范

主機名屬性的 getter 必須運行以下步驟:

  1. 如果此Location對象的相關Document性為非空且其來源與條目設置對象的來源不同,則拋出“SecurityError”DOMException。

  2. 如果此Location對象的 url 的主機是null,則返回空字符串。

  3. 返回此Location對象的 urlhost序列化。

(我的重點)

本地 URL 的主機是null,因此步驟 2 中強調的部分適用。


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號