【问题标题】:Safari Extension: window.open(...) doesn't work sometimes?Safari 扩展:window.open(...) 有时不起作用?
【发布时间】:2014-09-10 14:56:55
【问题描述】:

我有一个注入的样式表,它两次调用带有window...open() 的弹出窗口。一种是用户单击 HTML 按钮,另一种是用户单击上下文菜单项。要监听上下文菜单项,我需要像这样在注入的脚本上添加一个监听器

safari.self.addEventListener("message", messageCallBack, false); // Message comes from global.html when context menu item is clicked

还有下面的回调

function messageCallBack(msgEvent) {
   ... 
   window.open(...)
   ...
}

由于某种原因,弹出窗口在按钮调用 window.open 时有效,但在消息回调调用 window.open 时无效。我假设它可能与 window 对象有关。

【问题讨论】:

    标签: safari safari-extension


    【解决方案1】:

    我怀疑这是因为对 window.open 的限制旨在打击弹出式广告。这意味着它只会在响应点击事件时起作用。

    要解决这个问题,我建议您使用 safari.application API 从全局页面打开新窗口:

    safari.application.openBrowserWindow();
    safari.application.activeBrowserWindow.activeTab.url = '...';
    

    您还可以使用以下方法打开新标签:

    safari.application.activeBrowserWindow.openTab('foreground').url = '...';
    

    要实现这一点,您可能需要从注入的脚本向全局页面发送消息。

    【讨论】:

    • 原来如此!是否可以将新窗口的属性设置为:"scrollbars=no,menubar=no,height=540,width=600,resizeable=no,toolbar=no,status=n‌​o"
    • 不幸的是,我认为您不能以相同的方式设置属性。但是您可以尝试在加载的页面上使用 javascript 设置它们(必要时注入)。例如window.resizeTo(600,400).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多