4

我有一个小书签需要打开一个新窗口/标签。为了避免弹出窗口阻止程序,我需要window.open()直接在书签中调用该方法,即:在浏览器级别。

但是,我想通过加载外部 Javascript 文件来保持小书签的可更新性。为此,小书签需要将脚本节点附加到 DOM。如果我将window.open()代码放在这些外部加载的脚本之一中,弹出窗口阻止程序会阻止它,因为它是页面级别的。

我想知道的是我是否可以window.open()在我的书签中创建一个包装函数,然后从外部加载的脚本中调用它?像这样的包装的范围和权限是什么?

4

2 回答 2

1

我想出了一个不完美但符合要求的解决方案:

这是书签代码:

javascript:window.open(window.location);window.location="http://www.google.com/";var%20s=document.createElement('script');s.setAttribute('src','http://my-script.js');document.body.appendChild(s);void(0);

可读的逐步等效为:

window.open(window.location);                // Clone the current tab
window.location = "http://www.google.com/";  // Navigate to the desired page url
var s = document.createElement('script');    // Create the script
s.setAttribute('src','http://my-script.js'); //
document.body.appendChild(s);                // Embed it into current document

只剩下一个问题:您要显示的页面默认情况下是不活动的。克隆的是。

于 2010-05-23T17:10:45.647 回答
0

我想知道这种方法是否可行——很高兴看到它确实有效。

这里的一般问题是浏览器不会让你打开一个新窗口,而不是通过直接的用户交互。因此,您无法从远程脚本打开窗口。

您直接从小书签打开窗口,移动到该位置,然后调用远程脚本。

我采用的替代方法是将远程脚本的内容直接移动到小书签。这对我的简单应用程序来说很好。我在我的博客上写了

于 2011-02-11T19:15:13.520 回答