[英]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");
};
<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.