gpt4 book ai didi

javascript - IE 中每个浏览器选项卡中的不同图标

转载 作者:可可西里 更新时间:2023-11-01 02:12:37 28 4
gpt4 key购买 nike

我们的应用程序中有一个自定义 session 机制,允许用户在每个浏览器选项卡中拥有不同的 session (例如,不同的凭据),即使 URL 相同。这种机制适用于所有主流浏览器,包括 IE (v11)。

问题

我们想为每个浏览器选项卡提供不同的图标(不同颜色)以指示哪个选项卡属于哪个 session 。为此,我们使用

根据 session 设置不同的图标 URL
<link rel='icon' href='url_to_favicon_session_id' type='image/ico'/>

它在 Firefox 和 Chrome 中运行良好,但是 IE 似乎在指向同一 URL 的所有选项卡之间共享图标(每个选项卡中的图标相同,加载顺序决定了每个选项卡中可见的图标)。

问题

我们能否以某种方式强制 IE 不在具有相同 URL 的浏览器选项卡之间共享网站图标?

请注意,此处不能更改 URL。

最小工作示例

下面是重现问题的完整代码片段(将其放在网络服务器上以在支持 HTML5 的 IE 中运行;在同一浏览器的多个选项卡中打开此文件)。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script type="text/javascript">

var icons = [
"http://google.com/images/google_favicon_128.png",
"https://assets-cdn.github.com/favicon.ico",
"https://www.microsoft.com/favicon.ico?v2",
"https://s.yimg.com/rz/l/favicon.ico",
"http://www.stackoverflow.com/favicon.ico",
];

var idx = localStorage["favicon"];
if (idx === undefined) {
idx = 0;
} else {
idx = parseInt(idx);
}

localStorage["favicon"] = (idx + 1) % icons.length;

var link = document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'icon';
link.href = icons[idx];
document.getElementsByTagName('head')[0].appendChild(link);

</script>
</head>
<body>
Open this page in multiple tabs. Favicon should be different in each tab.
</body>
</html>

最佳答案

根据我的经验,IE 和几乎所有其他浏览器一样,使用与页面缓存分开的缓存机制来防止不断检索网站图标。这意味着除非更改 url 并清除域的缓存,否则对图标的更改可能是不可预测的。我能看到的解决此问题的唯一可靠方法是添加一个唯一 ID 来标识每个 session 的选项卡,强制 IE 分别缓存每个 session 的图标。

您可以尝试使用 GET 变量(即 yoursite.com/page?sessionid),但是,根据我的经验,无论 GET 变量如何,IE 仍会在同一域中跨页面缓存网站图标。事实上,Microsoft's documentation说你可以使用链接标签让不同的页面有不同的图标,但是,我经常发现即使你在不清除缓存的情况下更改链接标签,IE 的图标缓存也不会更新。此外,如果您关闭了所有缓存,IE 将根本不会显示网站图标。而且,在某些版本的 IE 中,链接标记似乎也不优先于默认位置的任何图标。

不过,我已经成功地使用路由脚本将请求发送到正确的页面,然后将 sessionid 附加为路径的一部分(即 yoursite.com/page/sessionid)。这需要在您的路由脚本中做一些额外的工作来忽略 sessionid,但根据我的经验,这是唯一可以让 IE 识别不同 session 的不同图标的类似可靠的方法。

关于javascript - IE 中每个浏览器选项卡中的不同图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com