#javascript #hyperlink #node-webkit
#javascript #гиперссылка #узел-webkit
Вопрос:
Я кое-что сделал в 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», чтобы определить это, так как это некрасиво и грязно. И «фрейм», и «политика» кажутся бесполезными параметрами.
Ответ №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);
});
Комментарии:
1. Спасибо. Работает. Я просто хотел бы, чтобы это было встроено в NW.js . Я не могу объяснить, почему… Мне кажется «хакерским», что в моем коде всегда есть такие маленькие фрагменты, как этот. NW.js это действительно классная идея, но мне интересно, почему это такой «бардак»?