Javascript bookmarklet中定义的函数能否从页面级脚本调用?

Javascript bookmarklet中定义的函数能否从页面级脚本调用?,javascript,permissions,popup,wrapper,bookmarklet,Javascript,Permissions,Popup,Wrapper,Bookmarklet,我有一个书签,需要打开一个新窗口/选项卡。为了避免弹出窗口拦截器,我需要在bookmarklet ie:浏览器级别直接调用window.open()方法 但是,我希望通过加载外部Javascript文件来保持bookmarklet的可更新性。为此,bookmarklet需要将脚本节点附加到DOM中。如果我将window.open()code放入其中一个外部加载的脚本中,弹出窗口拦截器将从其页面级别开始阻止它 我想知道的是,我是否可以在bookmarklet中的window.open()周围创建一

我有一个书签,需要打开一个新窗口/选项卡。为了避免弹出窗口拦截器,我需要在bookmarklet ie:浏览器级别直接调用
window.open()
方法

但是,我希望通过加载外部Javascript文件来保持bookmarklet的可更新性。为此,bookmarklet需要将脚本节点附加到DOM中。如果我将
window.open()
code放入其中一个外部加载的脚本中,弹出窗口拦截器将从其页面级别开始阻止它


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

我提出了一个不完美但满足要求的解决方案:

以下是bookmarklet代码:

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

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

我想知道这种方法是否可行——很高兴看到它能起作用

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

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


我选择的另一种方法是将远程脚本的内容直接移动到bookmarklet。对于我的简单应用程序来说,这很好。我写到,

是否可以使用名称
window.open()
,然后将内容注入该窗口?