我需要将一些JavaScript注入到现有的应用程序中。
该应用程序通常嵌入如下iframe
:
<html>
<body>
<iframe src="http://webchat.quakenet.org/" width="647" height="400"></iframe>
</body>
</html>
它是一个基于开源JavaScript的IRC客户端 http://webchat.quakenet.org/(源代码)。
现在我喜欢注入一些JS来突出显示特殊消息。为此,我已经找到了要覆盖的 HilighterClass。
问题是,我该怎么做?我想将JS注入iFrame
是现代浏览器"不允许"的,或者?
如果iFrame
有问题,也许我可以像他们一样添加客户端:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<base />
<title>QuakeNet Web IRC (qwebirc)</title>
...
<script type="text/javascript">
var ui = new qwebirc.ui.Interface("ircui", qwebirc.ui.QUI, {"appTitle":"QuakeNet Web IRC","dynamicBaseURL":"/dynamic/leibniz/","baseURL":"http://webchat.quakenet.org/","validateNickname":false,"networkServices":["Q!TheQBot@CServe.quakenet.org"],"nickValidation": {"maxLen":15,"validSubChars":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_[]{}`^\|0123456789-","validFirstChar":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_[]{}`^\|","minLen":2},"staticBaseURL":"/static/leibniz/","loginRegex":"^You are now logged in as [^ ]+\.$","networkName":"QuakeNet"});
</script>
</head>
<body>
<div id="ircui">
<noscript>
<div id="noscript">Javascript is required to use IRC.</div>
</noscript>
</div>
</body>
</html>
要求:
- 客户端应连接到 quakenet.org 服务器。由于某些跨站点脚本限制,这可能是一个问题。
- 最好的是,如果我的用户不需要其他插件。
像Privoxy这样的代理服务器,它可以将JavaScript注入页面。不幸的是,您的用户必须通过Privoxy进行所有浏览,因此这可能不是一种选择。
或者您设置自己的反向代理(例如 Squid)并在中继之前更改内容。您将用对您自己的库的调用来替换对 JavaScript 库的请求,该库包含原始 JavaScript 和突出显示代码。
你肯定听说过Greasemonkey,这是一个浏览器插件,可以做到这一点 - 注入内容。
您无法操作 iframe 的内容。 跨站点脚本不是这里的问题。
为了使注入变得简单,您可以使用 Gatejs SPDY/HTTP 代理并使用注入 gatejs 操作码 - 它适用于正向和反向代理。
Gatejs注入将尝试将你的html代码添加到HTML类型(text/html)的内容中。
下面是使用注入的前向代理示例。
var serverConfig = function(bs) { return({
hostname: "testServer0",
runDir: "/tmp/gatejs",
dataDir: "/path/to/dataDir",
logDir: "/var/log/gatejs",
http: {
testInterface: {
type: 'forward',
port: 8080,
pipeline: 'pipetest'
},
},
pipeline: {
pipetest: [
['injection', {
code: "<h1>w00t injection</h1>"
}],
['proxyPass', { mode: 'host', timeout: 10 }]
],
}
})};
唰��