2009-04-07 176 views
1

我正在编写一个基于网络的游戏,其中涉及点击互联网上各个网站上的链接。我知道这听起来很奇怪,但基本的前提是你从我的页面开始,点击另一个网站上某个页面的链接。您继续关注链接,直到您到达您尝试访问的页面。想想WikipediaGame.org。不同之处在于我无法控制带链接的实际页面。将JavaScript注入页面

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

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

回答

0

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

<iframe src="Puzzle/ContinuePuzzle" />

它指向源到我的mvc控制器。在我的控制器中,我为我想要的实际url做一个WebRequest,然后解析Html并在页面中粘贴我自己的javascript。该网页的行为看起来像另一个网站,但它实际上来自我的网站。

1

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

0

为了使这个跨浏览器兼容 - 我不知道如果没有为每个浏览器编写插件是否有方法。但是,我也可能是错的:-)

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

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

0

你不能单独使用javascript来做到这一点。你需要写一个Firefox插件或GM脚本。

-1

我不知道如何将JavaScript注入到别人的页面,然后它会向您发送消息。这实际上听起来像病毒会做的事情。

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

当你的页面上的按钮被按下,你可以查询iframe的当前状态......
引用的iframe中,并加载到iframe中的文档生成的窗口可以通过使用名称帧阵列获得属性。

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

参考的帧阵列方法具有广泛的支持,即使是很老的浏览器,只要将姓名属性的iframe。为获得最佳效果,请同时使用名称和ID。

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

编辑:

更多向上最新版本浏览器,iframe内的文件也可以通过contentWindow(IE赢)和contentDocument(DOM)IFRAME元素的属性引用的:正如下面的评论所暗示的,它看起来像大多数浏览器阻止您以这种方式使用iframe。您可以在任何需要的地方启动一个窗口,但如果它不在同一个域上,则不允许与其通信。我想你可以创建一个“中间人”的场景,在那里你首先通过你的服务器传输所有的流量,但这不是很实际。

这里的jQuery控制的iframe

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

希望帮助一个很好的例子。

+0

我不认为这是允许的。现代浏览器不喜欢跨站点脚本 – erikkallen 2009-04-07 21:17:49

0

我不确定你可以用你设想的方式来完成这件事。不写一个浏览器插件,我会看看像KeepVid这样的网站在做什么。他们有你在你的工具栏上创建书签,并且书签url是这样的:

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

即基本上将URL用户目前是超过到KeepVid一样。如果你使用这个概念,你可以让你的用户点击书签按钮来为你注册这个URL,你可以收集这些信息并将用户传回他们所在的位置。