• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

145
Views
How do I make it so that only *some* links open in the system browser instead of NW.js browser windows?

I have made a thing in NW.js. By default, any hyperlinks that the user can click on opens in a new NW.js browser window.

I'm trying to make it so that some (not all or none!) of these open in the system browser instead. It is important that these are <a> elements; not JavaScript function calls.

Reading on this page: https://nwjs.readthedocs.io/en/latest/References/Window/#event-new-win-policy-frame-url-policy

... I was able make it so that all hyperlinks open in the system browser. But I only want this for some. I want to specify an attribute or something, such as <a some-attribute="open-in-system-browser"...> which can be checked in the code:

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

What am I missing? If it can be avoided, I don't want to "parse the url" to determine this, as it's ugly and messy. Both "frame" and "policy" seem like useless parameters.

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

You don't need to do anything special, it works that way by default. Everything opens in NW.js directly unless you specifically tell it to open in the default browser.

There are many ways to do this, but a simple example would be

<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>

Vanilla 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);
  });
});

or the jQuery version

$('[data-external-link]').click(function (evt) {
  evt.preventDefault();
  nw.Shell.openExternal(evt.currentTarget.href);
});
almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error