动态更改网站图标:当 div 包裹头部时如何

Changing website favicon dynamically: how to when div wraps head

我发现 this solution 可以使用我的 Chrome 扩展名的 content.js (run_at: document_end) 中的代码更改网站图标:

(function() {
    var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
    link.type = 'image/x-icon';
    link.rel = 'shortcut icon';
    link.href = 'http://www.whosebug.com/favicon.ico';
    document.getElementsByTagName('head')[0].appendChild(link);
}());

上面的效果很好。

将整个文档包装在 div 中以稍后应用一些必要的自定义时会出现问题 CSS。

<html>
  <div id="allContent">
    <head></head>
    <body></body>
  </div>
</html>

在这种情况下,上面的第一个代码不会更改网站图标。我尝试将其最后一行更改为:

document.getElementById("allContent").getElementsByTagName('head')[0].appendChild(link);

虽然 link 被正确插入(在 <div id="allContent"><head> 的底部),但图标没有改变。

有人知道为什么吗?

<div><html><head> 之间无效。渲染引擎会解决它,但会出现奇怪的副作用,例如元属性(如 <link rel="icon" ... >)不可预测或被忽略。