2010-10-28 245 views
4

选中此链接。 http://dev.twitter.com/pages/share_bookmarklet为什么twitter bookmarklet不会被弹出式窗口拦截器阻止?

将bookmarklet拖到您的书签栏并单击它。它会打开一个弹出窗口。

为什么我的firefox/ie/chrome没有阻止这个?

感谢

javascript: 
function loadScript(scriptURL) { 
    var scriptElem = document.createElement('SCRIPT'); 
    scriptElem.setAttribute('language', 'JavaScript'); 
    scriptElem.setAttribute('src', scriptURL); 
    document.body.appendChild(scriptElem); 
} 
var url = 'http://api.bit.ly/shorten?version=2.0.1&login=tweetthees&apiKey=Rxyz&longUrl=' + document.location; 
var longUrl = document.location; 
loadScript(url + '&callback=tweetme'); 
function tweetme(json) { 
    var shortLink = json.results[longUrl].shortUrl; 
    var finalUrl = 'http://twitter.com/home?status=Reading: ' + document.title + ' ' + shortLink; 
    window.open(finalUrl, "Share link", "width=1024,height=400,location=1,status=1,scrollbars=1"); 
} 

回答

6

通常弹出窗口阻止程序不会阻止弹出窗口的一般情况,它们只会阻止应该在没有任何用户操作的情况下打开的弹出窗口。如果您使用bookmarklets,情况并非如此,因为用户在弹出窗口打开之前选择了小书签。当使用小书签时,它可能是,这不会被弹出式窗口拦截器观察到,就像Nick说的那样(我认为没有必要,小书签应该是可信的)。

但是在网页中,如果该功能在点击事件后被调用,该弹出窗口也不会被阻止。

+0

嗨..感谢您的评论。我已更新我的帖子。我已经添加了小书签代码,它打开了一个弹出窗口,但它被浏览器屏蔽了 – priyank 2010-10-29 01:46:35

+0

我不能告诉你具体的,它们如何阻止(因为有很多阻滞剂,每个人都可能有他自己的行为)。所以我的猜测是:它不依赖于时间,你的例子不会直接打开弹出窗口,它首先必须加载一些资源(我尝试了一个简单的超时,这不会被屏蔽)。我宁愿认为,这是访问说明的问题。书签和打开弹出窗口的函数之间没有直接上下文关系(调用函数的指令随后加载了脚本,所以我认为它不再被信任)。 – 2010-10-29 20:54:28

1

书签工具通常不被浏览器阻止的弹出式窗口拦截,你故意调用它....所以这是你想要的弹出,大概,因为你加入书签放在第一位。

+0

感谢您的回答。我写了这个书签,它和Twitter的功能类似。 – priyank 2010-10-29 01:05:08

+0

更新了我的文章。如果我运行它,浏览器将阻止弹出窗口。 – priyank 2010-10-29 01:20:10

1

首先,作为对用户操作的响应创建的弹出窗口通常不会被阻止。顺便说一句,标准的twitter小书签可能不会释放内存,所以我建议使用增强twitter bookmarklet它允许选择任何页面上的文本并将其发布到Twitter。更重要的是它释放分配给弹出窗口的内存。

+1

请详细说明内存问题。我在你的网页上看不到它。 – 2012-04-09 04:39:02