【问题标题】:How do I make it so that only *some* links open in the system browser instead of NW.js browser windows?如何使系统浏览器中仅打开 *一些* 链接而不是 NW.js 浏览器窗口?
【发布时间】:2022-01-12 00:33:34
【问题描述】:

我在 NW.js 中做了一个东西。默认情况下,用户可以点击的任何超链接都会在新的 NW.js 浏览器窗口中打开。

我正在尝试让其中的一些(不是全部或没有!)改为在系统浏览器中打开。重要的是这些是<a> 元素;不是 JavaScript 函数调用。

阅读本页:https://nwjs.readthedocs.io/en/latest/References/Window/#event-new-win-policy-frame-url-policy

...我能够在系统浏览器中打开所有超链接。但我只想要一些。我想指定一个属性什么的,比如<a some-attribute="open-in-system-browser"...>,可以在代码中查看:

nw.Window.get().on('new-win-policy', function(frame, url, policy)
{
    policy.ignore();
    nw.Shell.openExternal(url);
});

我错过了什么?如果可以避免,我不想“解析 url”来确定这一点,因为它又丑又乱。 “frame”和“policy”看起来都是无用的参数。

【问题讨论】:

    标签: javascript hyperlink node-webkit


    【解决方案1】:

    你不需要做任何特别的事情,默认情况下它就是这样工作的。除非您明确告诉它在默认浏览器中打开,否则所有内容都直接在 NW.js 中打开。

    有很多方法可以做到这一点,但一个简单的例子是

    <div>
      <a href="about.html">About</a>
      <a href="thing.html">Thing</a>
      <a href="https://example.com" data-external-link>Example</a>
      <a href="https://stackoverflow.com" data-external-link>Stackoverflow</a>
    </div>
    

    原版JS

    // Find all elements on the page
    var externalLinks = document.querySelectorAll('[data-external-link]');
    // Convert the node list to an array
    externalLinks = Array.from(externalLinks);
    // loop over each link
    externalLinks.forEach(function (link) {
      // add a click event listener to each link
      link.addEventListener('click', function (evt) {
        // Do not navigate to the link in NW.js
        evt.preventDefault();
        // get the URl for the clicked link
        var url = evt.currentTarget.href;
        // Open the url in the default browser
        nw.Shell.openExternal(url);
      });
    });
    

    或 jQuery 版本

    $('[data-external-link]').click(function (evt) {
      evt.preventDefault();
      nw.Shell.openExternal(evt.currentTarget.href);
    });
    

    【讨论】:

    • 谢谢。作品。我只是希望它被内置到 NW.js 中。我无法解释为什么......在我的代码中总是有这样的小sn-ps感觉有点“hacky”。 NW.js 是一个非常酷的想法,但我想知道为什么它会如此“混乱”?
    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多