在现有应用程序中“注入”JavaScript 以操纵 UI (qwebirc)
Posted
技术标签:
【中文标题】在现有应用程序中“注入”JavaScript 以操纵 UI (qwebirc)【英文标题】:"Inject" JavaScript in existing application to manipulate the UI (qwebirc) 【发布时间】:2012-10-16 12:53:50 【问题描述】:我需要将一些 javascript 注入现有应用程序。
应用程序通常嵌入iframe
,如下所示:
<html>
<body>
<iframe src="http://webchat.quakenet.org/" ></iframe>
</body>
</html>
它是一个基于 JavaScript 的开源 IRC 客户端 http://webchat.quakenet.org/ (source)。
现在我喜欢注入一些 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 服务器。由于某些跨站点脚本限制,这可能是个问题。 如果我的用户不需要其他插件,那最好。【问题讨论】:
【参考方案1】:您可以使用像 Privoxy 这样的代理服务器,它可以将 JavaScript 注入页面。不幸的是,您的用户必须通过 Privoxy 进行所有浏览,所以这可能不是一个选择。
或者您在中继之前设置自己的反向代理(例如 Squid)和 change the contents。您可以将对 JavaScript 库的请求替换为对您自己的库的调用,该库包含原始 JavaScript 加上您的突出显示代码。
你肯定听说过Greasemonkey,这是一个可以做到这一点的浏览器插件——注入内容。
【讨论】:
我认为 Greasemonkey 真的是我唯一的选择 :(【参考方案2】:您不能操纵 iframe 的内容。跨站点脚本不是这里的问题。
【讨论】:
【参考方案3】:为了使注入最简单,您可以使用 Gatejs SPDY/HTTP proxy 并使用 the injection gatejs opcode - 它适用于正向和反向代理。
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 ]
],
);
mk-
【讨论】:
我是 *** 的新手,我才意识到我做了什么 :) 另一个人也这么说。以上是关于在现有应用程序中“注入”JavaScript 以操纵 UI (qwebirc)的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net mvc 中处理 javascript 注入