繁体   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