小书签拖动到工具栏时如何设置图标/图标?


108

我已经为自己创建了一个书签,它的功能还不错,但是当添加到Opera或Firefox中的工具栏时,它只是采用了浏览器的默认书签图标(分别是一个地球仪和一个星星)。我的网站有一个网站图标,并且窗口,选项卡甚至[网站]书签都使用了我指定的网站图标。只是不是我的书签。

我该如何编码我的网站或小书签,以便小书签也能获得收藏夹图标?

我知道事实发生后,用户可以使用各种手动黑客技术来设置图标,但这是不受欢迎的解决方案。


示例:在Opera中拖动小书签会使小书签带有Diigo图标:diigo.com/tools/diigolet
Pistos

您链接到的那个不会在Firefox中对我有用。
benlumley

是的,也不在IE中。但这是在Opera中完成的。:)
Pistos

抱歉,我刚刚尝试过Opear 9.6,它在Opera中也不起作用。
古斯

1
这里有一个解决方案的建议:wiki.whatwg.org/wiki/Link_Icons
lapo

Answers:


23

小书签使用该javascript://架构,因此没有可从其加载收藏夹图标的域。

因此,当前您无法为书签提供图标。像这样思考:记住整个Java沙箱的东西-Java可能无法访问运行它的网页域之外的任何内容?那么,需要与当前正在查看的当前页面的任何域绑定的小书签,也不能与您自己的网站上的收藏夹绑定。

更新:根据Hans Schmucker的回答,有可能创建一个书签,当浏览器将其加载到书签菜单中时,它将生成一个带有收藏夹图标的HTML文档。推理似乎可行,但是我还没有看到这样的结果,而且我的测试结果是负面的。


17

这是您可以执行的操作:

  1. 将您的小书签拖动到书签栏。
  2. 在它旁边创建要用于书签的站点图标的书签。
  3. 打开“书签管理器”,单击“组织”下拉列表,然后选择“导出”,将书签另存为html文件。
  4. 在文本编辑器中打开该html文件。
  5. 找到您刚刚创建的书签,假设它的Gmail书签,您应该有一个html代码,如下所示:

<DT><A HREF="http://mail.google.com/mail/u/0/#inbox" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABV0lEQVQ4jdWQzUoCYRiFnxl/0plso0IKX7mqXWCLIlq0qEW4d19Qi6BLCELwEgpvQbyAVrroCrSNUJFGAyrkEEEMNs5PCxtRHGsZneX7nedwzgd/LQngObfnykIQOj9Disd/BFxdZ3hVwtE0Mje3kuw9OJqGWSji1BtzYafeGHk0jTdzCIA8aXANA/O6hFWuzMBWuYJ5XcI1DF6MAY8fxmxAYHdnZK7WMAtFXF3H1XXMQhGrWsN2XR5WM/QGn2MmOBkQOj5CFoJhuTKe5DUzbJvW1jbWZhbqd/4BAIGDfSQhGH7XBehLMlruEGlFzEyTZy6AvL5G+PICWQja6iJaPu8L+zbw9B4MYpyeEB4MkF7782z+AZ1OD0WNkk4vA7AUi/HUav8eYNsOnW6XZCJBJLIwvieTcVQ1SrN5j2XbUwFTf9DpdkmnUlOwJ0VRyGY3UBVl7px/qi+cdYQvZvKCUwAAAABJRU5ErkJggg==">Gmail</A>

  1. 复制整个ICON标签
  2. 在同一文件中找到您创建的书签,然后将复制的ICON标记插入书签标记:

<DT><A HREF="javascript:(function(){... bookmarklet JS code...})();" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABV0lEQVQ4jdWQzUoCYRiFnxl/0plso0IKX7mqXWCLIlq0qEW4d19Qi6BLCELwEgpvQbyAVrroCrSNUJFGAyrkEEEMNs5PCxtRHGsZneX7nedwzgd/LQngObfnykIQOj9Disd/BFxdZ3hVwtE0Mje3kuw9OJqGWSji1BtzYafeGHk0jTdzCIA8aXANA/O6hFWuzMBWuYJ5XcI1DF6MAY8fxmxAYHdnZK7WMAtFXF3H1XXMQhGrWsN2XR5WM/QGn2MmOBkQOj5CFoJhuTKe5DUzbJvW1jbWZhbqd/4BAIGDfSQhGH7XBehLMlruEGlFzEyTZy6AvL5G+PICWQja6iJaPu8L+zbw9B4MYpyeEB4MkF7782z+AZ1OD0WNkk4vA7AUi/HUav8eYNsOnW6XZCJBJLIwvieTcVQ1SrN5j2XbUwFTf9DpdkmnUlOwJ0VRyGY3UBVl7px/qi+cdYQvZvKCUwAAAABJRU5ErkJggg==">MyBookmarklet</A>

  1. 保存此文件
  2. 返回Chrom书签管理器,再次单击“整理”,然后选择“导入”
  3. 导入刚刚编辑的HTML文件,您的小书签现在有一个favicon

基本上,过程是获取书签标签的ICON属性并将其插入书签标签

在此处输入图片说明


1
(这是一个非常老的问题,但是...)我一直在寻找一种根本不需要任何最终用户操作的解决方案(除了将书签添加到工具栏之外)。即网站所有者可以做什么来指定图标。
Pistos

1
对我来说,这是最好的答案。它的工作原理,并进行了全面的解释。非常感谢你。
tsuma534 '18

13

这不是很正确:书签没有域,但是有一个位置(书签本身),您可以为其指定一个图标。之后,这取决于浏览器保存图标的方式(Firefox永久保存书签的图标,其他浏览器可能并不那么幸运)。

PS Security甚至没有发挥作用,图标可以来自任何地方。没有任何限制。

参见http://www.tapper-ware.net/blog/?p=97


3
虽然听起来像这样,但您链接到的博客中提供的示例只是生成带有图标的文档,Firefox可能会或可能不会显示该图标,或者实际上是在任意页面上运行Javascript的小书签-但不会两者(在Firefox 7上测试)。我仍然不相信这项工作。
摊铺

13

阅读了tapper [ware]和Restafarian网站之后,这是我能想到的最简单的解决方案:

<a href="javascript:

var title = window.location.href;

if (title.indexOf('http://yourwebsite/bookmarklet/') == 0) {
    '<head><link rel=\'shortcut icon\' href=\'favicon.ico\'></head>Bookmarklet';
} else {
    (function(){document.body.appendChild(document.createElement('script')).src='http://yourwebsite/bookmarklet.js';})();
}">Click Me!</a>

在Chrome和FF中效果很好,但是FF4是唯一将图标保存在书签栏中的浏览器。外观如下:http : //cl.ly/5WNR


我正在尝试了解有关书签的更多信息,您可以向新手解释一下代码吗?谢谢
安德鲁·麦肯齐

当然。当您单击它时,它将检查当前页面的URL。如果您位于“托管”书签的页面上(第4行),它将在页面上写入链接元素,指向所需的图标。您的浏览器将看到此内容并下载收藏夹图标。浏览器对此进行缓存,并使用它在书签栏中的图标。如果您在任何其他页面上,它将只执行您的bookmarklet应该执行的操作。
Brian McAllister 2012年

5
我不明白 当您将小书签拖到收藏夹栏中时(就像这里的Delicious书签一样),运行此代码的是什么?我不知道为什么在将书签保存到收藏夹栏中之后,即在浏览器确定其图标之后,才会单击书签(并运行代码)?
dumbledad

6

这是一种不错的技术,几乎可以满足您的要求。🙅

在Mac✅上可以很好地运行,但是在Windows 7上却无法运行。❌

使用“表情符号”🈳。它们是Unicode字符,碰巧也看起来像是彩色图标。您只能从预定义的图像列表中进行选择,但是实际上,这还不错-如果您想要做的只是给用户看些东西-来提醒他们小书签的功能。

例如,我正在制作一些“安全密钥”书签。所以我在书签名称中使用🔑!😃😊

所以基本上您会在书签栏中看到图片🎑

使用此网站可以帮助您找到适合您的书签的表情符号:http : //emojipedia.org/symbols/


1
我只得到一大堆“该代码点没有字形”标记。鉴于我在Linux上使用Firefox,这意味着后备行为甚至无法在系统上以任何字体找到它们。我猜对了,这是博主一直在告诉Web设计师避免使用的Mac专用表情符号字形吗?
ssokolow 2012年

是的 但是,如果您知道客户端在能够显示表情符号的计算机上运行,​​那么显示它们是否很糟糕?对于我自己的个人用途,我将允许用户决定是否要输出表情符号。如果没有,我什么也不会输出,它们只会得到纯文本。
Theo 2012年

除了该解决方案可以解决使用它的Web设计人员的无数失败之外,我不会冒险当(并非如果)有人不可避免地加载我在非Mac系统上构建的内容时给我留下的不好印象。
ssokolow 2012年

为此投票的部分目的是出于实用目的,部分目的是为了娱乐价值。表情符号是生活中所有问题的答案!
Sridhar Sarnobat '17

提示:使用此网站可以复制和粘贴所需的表情符号:emojipedia.org/upwards-black-arrow
Sridhar Sarnobat

4

根据Wizek的建议,您可以将代码放入data-uri。

data:text/html;charset=utf-8,
<html>
<link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico">
<script type="text/javascript">
    alert('It works!')
</script></html>

并将所有这些保存为书签。(试试吧!将代码拖到选项卡栏中)

不幸的是,它仅在某些情况下有效(更多信息请参见下文)。

这个怎么运作:

(至少在Chrome中)类似于使用javascript: "<html>...your html code here, including a javascript tag that will run when loaded...</html>"其他解决方案建议的格式的书签。在这种情况下,您所在页面上的html 将被书签小册中的html 代替,但是位置保持不变,小书签本身仍然没有位置,因此Chrome无法为其保存收藏夹图标。

相反,使用data-uri书签,我们转到其他页面,它具有其自己的位置,浏览器可以为其保存一个收藏夹图标。将其视为“在浏览器中托管网站”,如果您同步书签,则可以在其他计算机上访问它。如果您想将所有内容都保留在本地,也可以将favicon用作base64图像而不是url。

它有局限性。

  • 当您单击它时,它将离开当前页面并将该页面加载到数据中。因此,您将无法将其用于与当前页面交互的小册子,仅用于可在其他页面中执行的代码。

  • 不要在//中使用注释。由于所有内容都将保存在一行中,因此请将它们包装在/ ** /中,不要忘记分号

  • 在FF中,它保存了收藏夹图标,但是如果我想使用window.open(),则无法将其设置为始终打开弹出窗口,因为它不允许我为数据网址保存默认行为


举个例子:

使用这种技术,我创建了一个带有图标生成器的小书签。您可以将此代码拖到URL栏中(或将其另存为书签)以使用它。这是一个简单的页面,带有用于代码和图标的输入区域,然后生成带有图标的书签

data:text/html;charset=utf-8,<html><head>
    <title>Bookmarklet With Icon Generator</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
    <link rel="shortcut icon" href="https://www.freefavicon.com/freefavicons/objects/plain-thumbs-up-152-237293.png">
</head>
<body>
    <div class="container">
        <div class="page-header">
            <h2>Write your javascript  and specify a favicon, then drag the button to your bookmarks bar</div>
                </h2>
        <a id="bookmarkbutton" href='' ondragend='this.click()' draggable="true" class="btn btn-primary btn-lg" role="button"> 
            Drag me to your bookmarks bar! </a><br /><br />
        <div> 
            <label for="fav_href">Favicon:</label>
            <input id="fav_href" value='https://stackoverflow.com/favicon.ico' style='width:100%'></input> </div><br />
        <div>
            <label for='ta'>Write your JavaScript below</label>
            <textarea id="ta" style="width:100%;height:50%">
setTimeout(()=>{            &%2313
    alert('hello world');   /*Use this format for comments, use %2523 instead of hash (number sign)*/ &%2313
    window.history.back();  &%2313
},200);
            </textarea></div>
  </div>
    <script type = "text/javascript">
        fav_href.onchange = ta.onchange = function(){
            bookmarkbutton.href = 'data:text/html;charset=utf-8,<html><head>'+
                '<link rel="shortcut icon" href="'+ fav_href.value +'">'+
                '<script type="text/javascript"> '+ ta.value +'<\/script>';
            };
        ta.onchange();
    </script>
</body>

另一个示例:通过书签在其自己的小窗口中打开Facebook Messenger(如果您的浏览器默认阻止弹出窗口,则可能无法使用)

data:text/html;charset=utf-8,
<html>
    <link rel="shortcut icon" href="https://facebook.com/images/messengerdotcom/favicon/favicon.ico">
    <script type="text/javascript">
        url = 'https://www.messenger.com/';
        w = 740; h = 700;
        x = parseInt( screen.availWidth/2 - w/2 );
        y = parseInt( screen.availHeight/2 - h/2 );
        nw = window.open(url,'', 'width='+ w +',height='+ h +',top='+ y +',left='+ x);
        nw.focus();
        setTimeout(()=>{ 
          window.history.back();
          window.close();  
        },200);
    </script>

获取小书签图标的其他Chrome解决方法:


1
这仅适用于Chrome和Safari。不幸的是,不是Mozilla。小书签的目的是作为跨浏览器IMO。
sijpkes

这就像唯一起作用的东西。圣牛,非常感谢。
亚历克斯·比尔斯

3

可以使用javascript和canvas来分配和修改favicon图标(请参见Favicon图标游戏Defender of the Favicon)。游戏的源代码将帮助您实现这一目标(它基本上依赖于画布上toDataUrl()函数的使用,如源代码的554行所示)。

// set favicon
if( !stupidBrowser && useIcon )
{
     var    icon=$('favicon');
     (newIcon = icon.cloneNode(true)).setAttribute('href',ctx.canvas.toDataURL());
     icon.parentNode.replaceChild(newIcon,icon);
}

单击或保存以此方式设置收藏夹的小册子时,会发生什么?我不知道,但是尝试一下可能会很好。浏览器可以保存吗?


1
(在Chrome中测试)没有解决方案。当您使用小册子更改收藏夹图标时,您仍在同一位置。浏览器可能会更改当前页面的书签图标,但不会将其分配给小册子。
aljgom


1

因此,这还不是一个完整的解决方案,但可能是迈向工作方向的一步。

data:使图标编码为data:-uri编码的html效果令人惊讶。

data:text/html;charset=utf-8, <title>Separator Tab</title><link rel="shortcut icon" href="data:image/png;base64,AAABAAEAEBAAAAEAIAAoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP+Wlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/lpaW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5aWlv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWlpb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /> Separator Tab

既然是<html>,我们也可以<script type="javascript">在那里运行。

对于某些书签,这可能已经绰绰有余。对于想要修改当前页面或至少在打开新标签页之前从中获取一些信息的其他人,祝您运气还不错。如果有办法,我将更新此答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.