我正在为 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
,outerText
和textContent
,但它们都有相同的问题。
我知道 Opera 在这里没有做错任何事情。服务器说它是 atext/html
并且 Opera 只是做它通常用 atext/html
响应做的事情。
因此,我的问题是:有什么方法可以通过 user-JS 获得未受影响的响应?