我正在創建一個基於網絡的遊戲。作爲其中的一部分,玩家必須前往網站的主頁,然後按照一系列鏈接進行操作,直到他儘可能在短時間內到達「目的地頁面」。把它想象成一種鏈接尋寶。獲取跨域URL的iFrame替代方案
爲了控制比賽,我創建了一個頁面在頂部一個javascript計時器,並顯示網站衝浪(這不是我的,我有沒有對其進行控制)的iFrame。
但是,這有一個巨大的錯誤:無法檢測到iFrame的當前跨域URL,因此我的頁面無法知道用戶何時到達目標頁面並停止遊戲。
有沒有其他辦法可以做到這一點?
我正在創建一個基於網絡的遊戲。作爲其中的一部分,玩家必須前往網站的主頁,然後按照一系列鏈接進行操作,直到他儘可能在短時間內到達「目的地頁面」。把它想象成一種鏈接尋寶。獲取跨域URL的iFrame替代方案
爲了控制比賽,我創建了一個頁面在頂部一個javascript計時器,並顯示網站衝浪(這不是我的,我有沒有對其進行控制)的iFrame。
但是,這有一個巨大的錯誤:無法檢測到iFrame的當前跨域URL,因此我的頁面無法知道用戶何時到達目標頁面並停止遊戲。
有沒有其他辦法可以做到這一點?
是否有另一種方式,我可以做到這一點?
沒有,沒有。
相同來源策略完全阻止您訪問顯示來自其他域的內容的任何窗口對象的屬性。
(如果一個是另一個的子域,那麼document.domain
將有助於但是從你的問題的描述,聽起來不像是這樣的話。)
而且除了技術問題:生成流量和點擊次數(這將歪曲他們的統計/分析)在你不擁有的網站上,只是爲了能夠展示你自己的遊戲,這將是相當不公平的(也叫做「迪克移動」)。
您可以等待解決了iFrame的contentWindow
,並且您有一個對iFrame的窗口的引用,實事求是地來源。 一旦你有,你可以添加iframe的<body>
一個onload事件處理程序,並注入該處理程序內的一些postMessage
通話,所以一旦身體被加載iframe的窗口就西港島線從身體的onload處理程序調用postMessage的,它會通知你的外窗口的,當然你必須使用window.addEventListener("message", callback)
這聽起來很有趣,但我想它不適用於跨域iFrames,是嗎? – user2747949
'postMessage'跨域邊界工作;但我懷疑SOP是否允許這部分:_「你可以在iframe的'
''_ – CBroe是的,它會,添加onload處理程序,詳情請參閱postMessage API,API的目的是在不同窗口內與跨域進行通信的iframe和主窗口。 –
網站的所有者給了我這樣做的許可外窗口來添加消息監聽器,我絕不會做這種否則。然而,顯然,他不願意編輯他的網站,以便與我的遊戲兼容。 – user2747949
Ah OK,在這種情況下...... :)他們不需要做任何重大修改 - 如果他們願意嵌入外部JavaScript形成你的網站,那麼你可以使用'postMessage'在框架之間進行通信。 (科希克在他的回答中提到的postMessage了,但我不認爲他的方法是有效的 - 再次一部分「你可以在iframe的'
'添加一個onload處理」是哪裏的SOP會說沒了) – CBroe