2009-04-07 173 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,你可以收集這些信息並將用戶傳回他們所在的位置。