簡體   English   中英

有沒有辦法跟蹤使用Javascript從哪個window.name打開新窗口(在新選項卡中打開)?

[英]Is there a way to track from which window.name a new window was opened (open in a new tab) with Javascript?

我需要從起點跟蹤所有用戶的瀏覽器活動。 所有起點均分配有唯一的window.name

如果用戶單擊新選項卡中的打開,我將失去此唯一標識符以實際跟蹤每個起點。 我需要在某個地方找到這兩個窗口(子級和從中觸發子級的父級窗口)之間的關聯。

是否可以將“在新標簽頁中打開”作為事件處理,以便可以附加事件偵聽器? 或者還有什么其他解決方案?

您已在下面的評論中澄清了您的問題。 您要特別詢問用戶右鍵單擊鏈接並選擇“在新選項卡中打開”。 (與用戶單擊設置為在新標簽頁中打開的鏈接相反,這是我最初閱讀的方式。)

最簡單,最可靠的方法是修改頁面上的鏈接,以將窗口名稱作為查詢字符串參數傳遞:

var i, list, href;
list = document.getElementsByTagName("a");
for (i = 0; i < list.length; ++i) {
    href = list[i].href;
    if (href.indexOf("?") === -1) {
        href += "?wnd=" + encodeURIComponent(window.name);
    }
    else {
        href += "&wnd=" + encodeURIComponent(window.name);
    }
}

然后目標頁面僅檢查location.search的查詢字符串參數。

或者,您可以在用戶單擊鏈接時在Web會話存儲中設置一些信息,然后在目標頁面上進行檢查:

在第一頁上:

var i, list;
list = document.getElementsByTagName("a");
for (i = 0; i < list.length; ++i) {
    list[i].addEventListener("click", setWindowName, false);
    // If you need to handle IE8, you'll need to do the addEventListener / attachEvent dance
}
function setWindowName() {
    sessionStorage.wndname = window.name;
}

然后在目標頁面上:

var sourceWindow = sessionStorage.wndname;

除此之外,您可以給他們提供一個鏈接,該鏈接將為他們打開一個新標簽頁中的窗口(請參見下文),但是如果他們右鍵單擊該鏈接並說“在新標簽頁中打開”,我認為這沒有任何意義兩個窗口之間的連接。 服務器端,您可以檢查REFERER [sic] HTTP標頭,但我認為沒有任何純粹的客戶端。

我可以將“在新標簽頁中打開”作為事件進行處理嗎?

我認為用戶在新窗口或新標簽頁中打開鏈接時不會引發任何事件。


如果通過window.open或帶有target="..."的鏈接打開窗口,則新窗口將具有一個全局的opener ,該opener是對打開該窗口的引用。 因此, opener.name

父窗口示例: 實時復制 | 現場直播

window.name = "parentwin";
document.querySelector('p').onclick = function() {
    window.open("/uTEzowOQ/1");
};

或通過鏈接: Live Copy | 現場直播

<p><a href="/uTEzowOQ/1" target="_blank">Click me</a></p>
<script>
window.name = "parentwin";
</script>

子窗口: 來源

if (!opener) {
    display("My <code>opener</code> isn't set.");
}
else if (!opener.name) {
    display("<code>opener.name</code> is blank");
}
else {
    display("My opener's name is " + opener.name);
}

請注意,如果您直接進入子頁面 ,則會顯示“未設置我的開啟器”。 但是,如果您通過上面的任一父頁面轉到那里,則會看到“我的揭幕戰的名字是parentwin”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM