为什么 Twitter 书签小工具不会被弹出窗口拦截器屏蔽?

4

请查看此链接。 http://dev.twitter.com/pages/share_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");
}
3个回答

6
通常情况下,弹出窗口拦截器不会阻止普通的弹出窗口,它们只会阻止没有任何用户操作就应该打开的弹出窗口。但如果您使用书签小程序,则情况并非如此,因为在弹出窗口打开之前,用户会先选择书签小程序。当使用书签小程序时,可能不会被弹出窗口拦截器观察到,就像Nick所说的那样(我认为没有必要,书签小程序应该是可信的)。
但是,在网页中,如果在点击事件后调用该函数,则此弹出窗口也不会被阻止。

嗨,谢谢您的评论。我已经更新了我的帖子。我添加了一个书签代码,它会打开一个弹出窗口,但是被浏览器阻止了。 - priyank
我无法确切地告诉你它们是如何进行阻止的(因为有很多阻塞器,每个人可能都有自己的行为)。所以我的猜测是:这与时间无关,您的示例不会直接打开弹出窗口,它首先必须加载一些资源(我尝试了一个简单的超时,这并没有被阻止)。我认为这更像是访问指令的问题。书签和打开弹出窗口的函数之间没有直接关系(调用函数的指令稍后随着加载的脚本而来,我认为此时脚本已经不再受信任)。 - Dr.Molle

1

书签脚本通常不会被浏览器的弹出窗口拦截器阻止,因为您是有意调用它...所以这是一个您想要的弹出窗口,大概是因为您首先添加了书签脚本。


谢谢您的答复。我写了一个书签小工具,类似于 Twitter 所做的操作。 - priyank
更新了我的帖子。如果我运行它,浏览器会阻止弹出窗口。 - priyank

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

1
请详细说明一下内存问题。我在您的页面上没有看到任何提及。 - DG.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接