2016-03-27 46 views
0

把事件偵聽器不同的領域,我工作的一些項目中,在我有一種情況之下從當前域

父域提到:www.exampledomain.com

子域:www.someotherdomain。 COM

例如我的父域是www.exampledomain.com在我父域我有一個按鈕命名爲捕獲這個按鈕我加載子域的點擊其中有使用JavaScript

隨着新標籤加載的子域網址我試圖從父域附加事件監聽到的子域在新標籤頁的URL www.someotherdomain.com

我試圖找到捕獲所有在父域中的子域中執行的單擊操作。

我知道CORS的,但我想實現這個使用JavaScript

這可能嗎?任何指針高度讚賞提前

+0

您可以將其作爲Chrome擴展或Firefox插件使用,不是理想的,但值得一提 – DelightedD0D

回答

3

由於該瀏覽器將不會讓您包含來自其他域的網頁以任何方式(出於安全原因)直接訪問瀏覽器窗口。所以,你不能直接添加事件監聽器到任何域的頁面。

你被允許做的事情是讓兩個頁面合作(根據理論,如果他們特別合作在一起,那麼它必須是安全明智的)。但是,即使在合作的情況下,你也不能讓域A的頁面添加事件監聽器到域B的頁面中。你不能這樣做。

您可以使用window.postMessage()向其他窗口發送某種命令,然後另一個窗口自動執行DOM操作。你可以發送window.postMessage()來從另一個窗口請求一些信息,然後另一個窗口就會有你的特定請求的監聽器,會得到這些信息並將數據發送回去。這種結構顯然需要兩個完全合作的頁面。出於安全原因,您可以(也應該)限制您願意接受消息的域名。有關更多詳細信息,請參閱MDN doc for window.postMessage()

至於您的具體問題:

我試圖找到捕捉兒童 域父域進行的所有點擊動作。

你不能從父域中做到這一點。您可以從父域發送消息到子域,以要求子域自行設置請求的點擊處理程序,然後每次發生點擊時向您的數據發送數據。大部分工作必須在子窗口內用自己的代碼完成。

+0

如果我沒有任何控制要打開的子域的情況。我根本無法獲得這方面的任何信息嗎? –

+0

@Santhosh_Reddy - Nope。瀏覽器特別禁止客戶端Javascript訪問另一個域中的頁面。這是安全模型。如果您想訪問該內容,則需要一臺服務器爲您提取。 – jfriend00

+1

@Santhosh_Reddy - 或者您可以使用由用戶專門安裝的瀏覽器插件。 – jfriend00