Safari window.open() 不起作用

fra*_*sca 5 javascript safari window.open

我需要在新窗口中打开外部链接。我处理单击视图中的编辑按钮:

module.exports = utils.Backbone.View.extend({
    events: {
        "click #edit": "onEditClicked"
    },

    "onEditClicked": () => PubSub.publish("EDITOR_REQUESTED");
});
Run Code Online (Sandbox Code Playgroud)

然后我检查用户是否已登录。如果是 - 我发送通知“OPEN_EDITOR”并期望使用外部链接打开一个新窗口。

TextEditorController.prototype.handleMessages = function () {

    PubSub.subscribe("OPEN_EDITOR", () => {
        var editor = window.open(this.$service.getEditorURL());
    });
});
Run Code Online (Sandbox Code Playgroud)

但是在 Safari 中新窗口似乎被屏蔽了?我的情况有解决方法吗?

小智 13

其原因是 Safari 的内置弹出窗口阻止程序。

唯一允许在 Safari 中打开新窗口的 javascript - 是直接附加到用户事件的 javascript。在你的情况下,你稍后调用 window.open 。

这里的解决方法可以是:

  • 在 onEditClicked 方法中创建一个没有 URL 的窗口

    safariWindow = window.open();

  • 在 handleMessages 函数中更改该窗口的 URL

    safariWindow.location.href = newUrl