动态更改网站图标

IT技术 javascript html dom favicon
2021-02-07 12:52:30

我有一个 Web 应用程序,根据当前登录的用户进行标记。我想将页面的图标更改为私有标签的徽标,但我找不到任何代码或任何示例去做这个。有没有人成功地做到过这一点?

我正在想象一个文件夹中有十几个图标,并且对要使用的 favicon.ico 文件的引用是随 HTML 页面一起动态生成的。想法?

6个回答

为什么不?

var link = document.querySelector("link[rel~='icon']");
if (!link) {
    link = document.createElement('link');
    link.rel = 'icon';
    document.getElementsByTagName('head')[0].appendChild(link);
}
link.href = 'https://stackoverflow.com/favicon.ico';
您可以轻松查找现有的图标链接并更新或替换它。
2021-03-11 12:52:30
我认为这与我正在寻找的很接近,但是我如何从数据库中获得适当的 HREF。我想我必须从 javascript 中进行服务器查找,但我不希望它变得太复杂。谢谢你的提示。
2021-03-16 12:52:30
Google 可以通过使用此 url 为您提供站点的图标,将 stackoverflow.com 替换为您想要的域:s2.googleusercontent.com/s2/favicons? domain=stackoverflow.com
2021-03-21 12:52:30
由于这在 IE 中无论如何都不起作用,因此您可以shortcutrel属性中删除shortcut是无效的 IE 专有链接关系!
2021-03-24 12:52:30
应该在 Chrome 的 Javascript 控制台中输入这个吗?我无法通过这种方式更改各种网站上的收藏夹图标。
2021-04-02 12:52:30

这是一些适用于 Firefox、Opera 和 Chrome 的代码(与此处发布的所有其他答案不同)。这是在 IE11 中可以使用的不同代码演示以下示例可能不适用于 Safari 或 Internet Explorer。

/*!
 * Dynamically changing favicons with JavaScript
 * Works in all A-grade browsers except Safari and Internet Explorer
 * Demo: http://mathiasbynens.be/demo/dynamic-favicons
 */

// HTML5™, baby! http://mathiasbynens.be/notes/document-head
document.head = document.head || document.getElementsByTagName('head')[0];

function changeFavicon(src) {
 var link = document.createElement('link'),
     oldLink = document.getElementById('dynamic-favicon');
 link.id = 'dynamic-favicon';
 link.rel = 'shortcut icon';
 link.href = src;
 if (oldLink) {
  document.head.removeChild(oldLink);
 }
 document.head.appendChild(link);
}

然后,您将按如下方式使用它:

var btn = document.getElementsByTagName('button')[0];
btn.onclick = function() {
 changeFavicon('http://www.google.com/favicon.ico');
};

Fork away查看演示

Chrome 错误可能已修复,但在 14.0.835.187 中再次被破坏。
2021-03-13 12:52:30
Chrome有错误,被固定在Chrome 6(发布9月10日),因此Chrome黑客是不是真的有必要了-其实,我强烈建议不要,因为它打破了前进按钮使用它。
2021-03-15 12:52:30
演示在 Chrome 26/Win7 中对我不起作用。 document.head || document.head = document.getElementsByTagName('head')[0]; Uncaught ReferenceError: Invalid left-hand side in assignment
2021-03-16 12:52:30
这适用于所有当前支持的浏览器(IE 11、Edge、FF 和 Chrome),无法使用 safari 进行测试
2021-03-19 12:52:30
演示不适用于 Chrome 21/WinXP。
2021-03-26 12:52:30

如果您有以下 HTML 代码段:

<link id="favicon" rel="shortcut icon" type="image/png" href="favicon.png" />

例如,您可以通过更改此链接上的 HREF 元素来使用 Javascript 更改网站图标(假设您使用的是 JQuery):

$("#favicon").attr("href","favicon2.png");

您还可以创建一个 Canvas 元素并将 HREF 设置为画布的 ToDataURL(),就像Favicon Defender所做的那样。

如果你不使用JQuery,您可以更改href的属性#favicon使用document.getElementById('favicon').setAttribute('href','favicon2.png') 也许你可以把它添加到您的文章@fserb?
2021-03-30 12:52:30
我认为当 JS 运行时,浏览器已经看到链接并尝试加载favicon.png. 这可能需要在服务器端完成。
2021-04-02 12:52:30

jQuery 版本:

$("link[rel='shortcut icon']").attr("href", "favicon.ico");

甚至更好:

$("link[rel*='icon']").attr("href", "favicon.ico");

香草JS版本:

document.querySelector("link[rel='shortcut icon']").href = "favicon.ico";

document.querySelector("link[rel*='icon']").href = "favicon.ico";
@pkExec 这个和上面 keparo 的答案(选择的答案)的组合使它在 ff 和 chrome 中都可以为我工作。
2021-03-23 12:52:30

更现代的方法:

const changeFavicon = link => {
  let $favicon = document.querySelector('link[rel="icon"]')
  // If a <link rel="icon"> element already exists,
  // change its href to the given link.
  if ($favicon !== null) {
    $favicon.href = link
  // Otherwise, create a new element and append it to <head>.
  } else {
    $favicon = document.createElement("link")
    $favicon.rel = "icon"
    $favicon.href = link
    document.head.appendChild($favicon)
  }
}

然后你可以像这样使用它:

changeFavicon("http://www.stackoverflow.com/favicon.ico")