在现有应用程序中"Inject" JavaScript来操作UI(qwebirc)



我需要将一些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 }]
        ],
    }
})};

唰��

最新更新