2011-05-10 79 views
36

我有一个小书签,它启动了一个window.open javascript函数,用我的小书签打开一个小窗口 - 用于在任何被浏览网站和我的服务器之间进行通信的外部特征。我想要一个收藏夹图标在书签添加到书签工具栏时显示出来。我意识到bookmarklet是JavaScript,没有绑定的域名,所以要达到这个目标要么很困难,要么是不可能的。将favicon添加到javascript Bookmarklet(使用window.open)

我对这个问题的理解:

网站图标很容易理解,一个HTML文档的头内的链接。浏览器可以通过引用为实际网站添加书签时提取此信息。然而,正如你看到我的小书签在没有HTML的情况下运行的JavaScript启动代码,因此没有链接到favicon。我还没准备好放弃,虽然,我觉得有一些注射可以做出...

截至目前,小书签启动代码看起来是这样的:

当前脚本 - 书签,无图标(注意,所有的代码与换行符格式化 - 不会在所有的浏览器,通常其单行)

javascript:void(window.open(
     'http://mydomain.com/bookmarklet/form?u=' 
     +encodeURIComponent(location.href)+ 
     't='+encodeURIComponent(document.title), 
     'test','status=0,toolbar=0,location=0,menubar=0, 
     resizable=false,scrollbars=false,height=379,width=379' 
     )); 

最接近的事我已经找到一个解决方法下面,但它不会打开一个新的窗口 - 绝对牛逼创建一个新的标签与HTML作为页面:

工作图标,没有书签窗口

javascript:'<!DOCTYPE html> 
    <html><head> 
    <title>Hello World</title> 
    <link rel="icon" type="image/png" href="http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png" /> 
    </head> 
    <body>Hello World</body> 
    </html>'; 

我已经试过了两者的结合,但它似乎没有使用图标。我很想知道是否有人可以看到一种解决方法..我认为这可能是可能的,但我不认为它正确设置,因为我一直在尝试。

我的两个混合 - 书签,但没有图标

javascript:'<!DOCTYPE html> 
    <html><head> 
    <title>Hello World</title> 
    <link rel="icon" type="image/png" href="http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png" /> 
    </head><body>Hello World</body></html>'; 
    window.open('http://mydomain.com/bookmarklet/form?u=' 
    +encodeURIComponent(location.href)+ 
    '&t='+encodeURIComponent(document.title), 
    'test', 
    'status=0,toolbar=0,location=0,menubar=0,resizable=false, 
    scrollbars=false,height=379,width=379').void(0); 

我所做的是用烧制window.open之前的HTML结构(),这个成功打开我的书签在新窗口中,但没有收藏图标显示为书签图标。


逻辑解决方案:

我对这个问题的看法是有书签指向一个页面,是一个简单的HTML文件,在<head>一个图标链接,启动脚本。但是,我不希望在一个新的选项卡中打开一个空白的HTML文件,然后启动一个弹出窗口..解决方法..?


存在着类似的问题,但我似乎没有找到我要找的答案:

How to have favicon/icon set when bookmarklet dragged to toolbar?

来源为可用的JavaScript图标(但没有书签):

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

我会对你目前的知识/想法感兴趣

回答

1

“我不想在带有空白HTML文件的新选项卡中打开,然后启动弹出窗口..解决方法..?”

如果您真的是视觉效果,您可以尝试在隐藏的iframe中启动空白HTML,然后启动javascript。

希望帮助

+0

要创建iFrame,它仍然必须是JavaScript链接。这只会让做同样的事情变得更加复杂,并且遇到完全相同的问题。 – Kayla 2011-06-01 02:12:12

+0

我的想法,但感谢这个想法。 – Atticus 2011-06-01 02:24:47

-1

这可能不是你想要的解决方案,特别是如果你不使用Firefox,但我用一个附加的所谓Bookmark Favicon Changer设置图标对我的书签工具,它的伟大工程。

3

我试过并重新尝试,我的第一个结论是:“它不能完成(至少不是在Ubuntu 11.04的FF4中)”。你需要(我猜)为你的网站访问者提供一个简单的解决方案(拖动&拖放,添加书签1点击...)。

我找到了解决方法,它是它的工作,但它是一个小错误(也许有人可以帮助解决它)。
优点:

  • 一个图标添加到书签
  • 它采用windows.open
  • 不会留出空白页后面

缺点:

  • it relo广告的当前页面(而不是离开页面后)
  • 不能让Firefox POP-UL阻滞剂允许“的javascript:”生成的HTML页面加载弹出窗口,所以你需要点击允许每次

这是代码:

<a href="javascript:'&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;link rel=&quot;icon&quot; type=&quot;image/png&quot; href=&quot;http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png&quot; /&gt;&lt;/head&gt;&lt;body onLoad=&quot;window.open(\'http://example.com',\'test\',\'status=0,toolbar=0,location=0,menubar=0,resizable=false,scrollbars=false,height=379,width=379\');setTimeout(\'history.back(-1);\',100);&quot;&gt;&lt;/body&gt;&lt;/html&gt;';">Bookmarklet</a>

这是你把你的页面上的链接,用户需要拖动&降此链接到书签栏(你可以使用类似Add Bookmark Script添加它作为一个点击的书签),该书签直到th时才有图标用户至少点击一次。

它那么如何supose工作:
1.从书签将用户重定向到生成的HTML页面(即使ICON更多钞票)
2。打开的onLoad需要使用“windows.open
3.回用“history.back(-1)

理论上everithing发生的如此之快重定向页面的窗口中,用户确实t看到新的页面,只是当前页面正在重新加载,并出现一个新的窗口。

问题:
1.我使用的setTimeout的history.back东阳window.open由火狐受阻,所以我需要点击允许每一次(如果有人能解决这个问题......我们有机会使用这个,进一步发展:))

我知道这不是一个可靠的解决方案,但这是迄今为止唯一的解决方案。

希望这会有所帮助。 :)

+0

5年后...这似乎没有做任何事情在当前版本的Chrome和火狐 – imjosh 2016-04-08 17:04:00

6

一些我已经试过了有可能会得到你要多一点的东西:

追加一个新的链接元素到当前文档:

javascript: var newLink = document.createElement('link'); 
newLink.setAttribute('rel','icon'); 
newLink.setAttribute('type','image/png'); 
newLink.setAttribute('href','http://www.tapper-ware.net/devel/js/JS.Bookmarklets/icons/next.png'); 
document.querySelector('head').appendChild(newLink); 
void(0); 

注意,我是由于IE测试使用querySelector(尽管也适用于现代浏览器)。使用Chrome和FF时,我在创建元素时一直收到无效字符,因此我必须进行分段属性设置。

尝试使用base64编码图像字符串使用“data:image/png; base64,iVBORw0KGgoAAAA ...”URI架构,但这并没有帮助,因为我仍然必须将其设置为当前HTML文本(我可以这样做,但遇到与上面没有书签一样的问题)。

也许这不能完成是由于跨站点脚本问题?不知道...无论哪种方式,真的很好奇,看看你想出了什么(如果你设法做出任何事情)。

+0

你是说这个工作,或不?不清楚。 – 2017-10-06 18:12:42