将Javascript注入页面

时间:2009-04-07 20:24:14

标签: javascript asp.net-mvc

我正在撰写一个基于网络的游戏,其中包括点击互联网上各个网站上的链接。我知道这听起来很奇怪,但基本前提是你从我的页面开始,你点击链接到另一个网站上的某个页面。您继续关注链接,直至转到您要覆盖的页面。想想WikipediaGame.org。不同之处在于我无法通过链接控制实际页面。

我需要做的是跟踪他们点击的所有链接,当他们到达最终页面时,我想将它们发送回我的网站(或者沿着这些线路)。

我在想的是,也许我可以以某种方式拦截页面请求并注入一些Javascript来跟踪他们点击的链接。这可能吗?有人做过这样的事吗?显然,这可能会带来安全风险。我还有其他选择吗?我想避免让用户收集所有链接的列表,然后将它们发布到我网站上的文本框中。

6 个答案:

答案 0 :(得分:1)

也许是将当前页面发送到您网站的书签?这样,用户就可以完全控制以最少的工作量共享的链接列表。

答案 1 :(得分:0)

为了使这种跨浏览器兼容 - 我不确定是否有办法不为每个浏览器编写插件。但是,我也错了: - )

您可以尝试制作书签(当用户点击某个书签时运行的Javascript),但这不会在用户加载的每个页面上自动运行;用户必须单击它才能运行它。

如果您只想支持Firefox,可以编写一个可在每个页面/站点上运行的Greasmonkey脚本。但是,这会限制用户的范围。

答案 2 :(得分:0)

单独使用javascript无法做到这一点。您需要编写firefox插件或GM脚本。

答案 3 :(得分:0)

我不确定你能否像你想象的那样实现这一目标。如果不编写浏览器插件,我会看看像KeepVid这样的网站正在做什么。他们让您在工具栏上创建书签,书签网址为:

的javascript:document.location = 'http://keepvid.com/?url=' +逸出(window.location的);

这实际上是将用户目前使用的url传递给keepvid。如果您使用此概念,您可以让您的用户单击书签按钮向您注册该URL,您可以收集该URL并将用户传回原来的位置。

答案 4 :(得分:0)

所以我想出了该怎么做。我正在使用这样的iframe:

<iframe src="Puzzle/ContinuePuzzle" />

它将源指向我的Mvc控制器。在我的控制器中,我为我想要的实际网址执行WebRequest,然后解析Html并在页面中粘贴我自己的javascript。该页面的行为与其他网站相似,但它实际上来自我的网站。

答案 5 :(得分:-1)

我不知道你如何将JavaScript注入其他人的页面,然后会向你发送消息。这听起来像病毒会做的事情。

我认为你可以使用iframe完成你想要的东西 一种简单的方法是包含iframe预设以加载您网站上的“开始”位置,然后在外部页面上包含一个按钮,供用户回发其当前位置(在iframe中)。

当按下页面上的按钮时,您可以查询iframe的当前状态...
可以使用name属性通过frames数组获取iframe生成的窗口和加载到iframe中的文档的引用。

 window.frames[iframeName]  <br/>
 window.frames[iframeName].document  <br/>

只要您将名称属性附加到iframe,帧数组引用方法即使在相当旧的浏览器中也具有广泛的支持。为获得最佳效果,请同时使用name和id。

对于更多最新的浏览器,iframe中的文档也可以通过iframe元素的contentWindow(IE win)和contentDocument(DOM)属性引用:

// IE5.5+ windows
document.getElementById(iframeId).contentWindow
document.getElementById(iframeId).contentWindow.document
or,
// DOM 
document.getElementById(iframeId).contentDocument

编辑:正如下面的评论所示,看起来大多数浏览器都会阻止您以这种方式使用iframe。您可以在任何需要的位置启动窗口,但如果它不在同一个域中,则不允许与之通信。我猜你可以建立一个“中间人”的场景,你可以先通过你的服务器流过所有的交通工具,但这不是很实用。

以下是控制iframe的jQuery的一个很好的例子

http://wwwendt.de/tech/dynatree/doc/sample-iframe.html

希望有所帮助。