簡體   English   中英

如何在JavaScript中訪問通過<script type =“text / plain”src = ...>檢索的純文本內容?

[英]How to access plain text content retrieved via <script type=“text/plain” src=…> in JavaScript?

當使用<script type="text/plain" src="http://..."></script> ,其中URL引用純文本文件時,有沒有辦法訪問該文件的內容JavaScript的? 該文件將傳輸到瀏覽器,但不會更改script元素的innerHTML屬性值(它仍為空字符串)。 檢查DOM中的元素節點似乎沒有顯示可以通過其找到所接收內容的任何屬性。

我知道可以使用XMLHTTPRequest代替,但我對瀏覽器以我描述的方式獲取數據但似乎沒有提供任何訪問權限的問題感興趣。

首先, HTMLScriptElementtext屬性是訪問內聯<script>元素文本的首選方法。 DOM-2級HTML5:4.11.1都表明,一個腳本應該有一個屬性text包含腳本內部的文本

IDL屬性text必須以樹的順序返回作為script元素的子元素的所有Text節點的內容的串聯(忽略任何其他節點,例如注釋或元素)。 在設置時,它必須以與textContent IDL屬性相同的方式運行。

由於<script>元素為空(您指定了外部源),因此texttextContentinnerHTML為空。 這是因為text屬性僅在內聯腳本中設置:

如果腳本是內聯的,並且腳本塊的類型是基於文本的語言:

上次設置元素“已啟動”標志時text IDL屬性的值是腳本源。

因此,使用此方法不可能包含外部text/plain

也可以看看:

  • W3C:HTML5:4.11.1腳本元素:文本屬性和游戲地圖的示例:
     <script src="game-engine.js"></script> <!-- game engine isn't inline --> <script type="text/x-game-map"> <!-- but data needs to be inline --> ........U.........e o............A....e .....A.....AAA....e .A..AAA...AAAAA...e </script> 

請注意,如果支持它,它將提供一個巨大的安全漏洞和一種繞過保護json和其他數據的跨站點腳本保護的方法。 從本質上講,我討厭的網頁(比如nasty.com)可以通過使用腳本標記加載來訪問受cookie保護的私人數據。 例如

<script type="text/plain" 
       src="https://supersecure.com/youraccount/privatedocs/list"/>

由於supersecure.com的cookie將自動與請求一起發送(如同請求任何資源時一樣),安全站點只返回數據(例如私人文檔列表),因為它無法輕易地將請求分開來自其合法網頁的ajax請求中的一個。 這個漏洞與ajax不存在,因為瀏覽器只會阻止nasty.com的頁面向supersecure.com發出ajax請求,這要歸功於相同的原始策略。

顯然,內聯數據沒有安全問題。

經過幾天研究同一個問題,我發現了幾個對以下代碼的引用:

<html>
<head>
  <script type="text/javascript">
    function init() {
      var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data;
      extText = extText.replace(/[\r\n]/g, " ");
      document.forms[0].nMessage.value = extText;
    }
    window.onload = init;
  </script>
</head>
<body>
  <iframe name="messageTxt" src="txtData.txt" style="display:none"></iframe>
  <form>
    <textarea name="nMessage"></textarea>
    <input type="button" value="click" onClick="init()">
  </form>
</body>
</html>

上面的代碼確實訪問了txtData.txt文件(假設它存在)並將其作為默認文本轉儲到<textarea>中。 出於某種原因,上述答案中沒有一個提到這是有效的,我假設因為這個問題似乎特意暗示了<src>標簽(因為類似的技術可能不可用;我沒有檢查過); 然而,我仍然認為值得一提的是假設你的查詢預先獲得了獲取外部.txt文件的更普遍的問題(或者如果遇到此頁面的任何其他人正在尋求所述問題的答案),主要是因為我花了幾個小時研究它,所以我認為答案很難產生,這似乎是合理的。

是的,不,我認為你不能得到那樣的文字內容。 這主要是因為你將使用dom訪問元素來獲取一些從未真正注入到dom本身的文本。

我嘗試了一些選項而且沒有用。 我沒有充分的理由說明你無法找到它,但我放棄/想這樣的原因是因為即使我使用的WebKit檢查員也沒有三角形披露在script-src標記旁邊。 它的作用是將src轉換為可以單擊的鏈接,然后使用Ajax或其他任何內容從服務器讀取該文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM