2

我正在为 Opera 编写一些用户 JS。它对没有扩展名的请求做出反应,例如/stuff/code/MyFile,或者与 JavaScript 无关的请求,例如/stuff/code/load.do. 响应的内容类型设置为text/html,即使它返回纯 JavaScript 源 ( text/javascript)。由于我无权访问服务器代码,我只需要忍受这个。

现在的问题是我想用行号等格式化源代码并将其显示在 Opera 中。因此,我写了一些 user-JS 来做出反应AfterEvent.DOMContentLoaded(也试过了AfterEvent.load,同样的事情)。它读取e.event.target.body.innerHTML以获取对主体的访问权,即 JavaScript 代码。

如果源不包含 HTML 标记或比较运算符(<、>),仅此一项就可以很好地工作。既然这样做了,我永远不会得到我想要的输出。Opera 似乎有一些内部逻辑可以将text/html-response 转换为自己的表示格式。这包括例如删除 HTML 标记后的 CRLF,或者两个“匹配”< 和 >(比较运算符!)之间的代码被压缩成一行,应用于其中=""的每个单词之后。

这就是问题所在。

如果我在没有用户 JS 的情况下请求相同的 URL,然后查看“页面”的来源,我会看到一个干净的 JavaScript 代码,该代码与服务器发送的内容相同。这就是我想要访问的内容。

如果我使用innerText而不是innerHTML,Opera 也会去掉 HTML 标记,从而使文件与原始文件不同。

我也尝试查看outerHTML,outerTexttextContent,但它们都有相同的问题。

我知道 Opera 在这里没有做错任何事情。服务器说它是 atext/html并且 Opera 只是做它通常用 atext/html响应做的事情。

因此,我的问题是:有什么方法可以通过 user-JS 获得未受影响的响应?

4

1 回答 1

0

没有任何方法可以从 JS 访问预解析的标记。这样做的唯一方法是使用 XMLHttpRequest 自己请求内容。

于 2010-12-22T12:22:50.393 回答