Я хочу открыть ссылку iframe в браузере, используя электрон. Я нашел некоторые решения, но они не работают, вот примеры, которые я попробовал:

Я думаю, что проблема в том, что ссылка находится в теге scr.

Ищем возможное решение, почему ничего не работает

Вот пример элемента iframe

<iframe src="https://rcm-eu.amazon-adsystem.com/e/cm?o=3&p=48&l=ur1&category=channels&banner=138WWDCBD6MQJVWGMHG2&f=ifr&linkID=0335593f7b48da8f8d1dab568039dc08&t=adrgoe-21&tracking_id=adrgoe-21" width="728" height="90" scrolling="no" border="0" marginwidth="0" style="border:none;" frameborder="0"></iframe>

И вот мой электронный код

const shell = require('electron').shell;

// assuming $ is jQuery
$(document).on('click', 'a[href^="http"]', function(event) {
    event.preventDefault();
    shell.openExternal(this.href);
});
2
Adrian 28 Авг 2017 в 21:35

3 ответа

Лучший ответ

Я нашел решение. Я изменил iframe на веб-просмотр:

<webview id="webview" src="https://stackoverflow.com/" nodeintegration></webview>

JS сейчас:

const {shell} = require('electron')
const webview = document.querySelector('webview')
webview.addEventListener('will-navigate', (e) => {
  const protocol = require('url').parse(e.url).protocol
  if (protocol === 'http:' || protocol === 'https:') {
    shell.openExternal(e.url)
  }
});

Вместо «воли-навигации» вы можете выбирать различные действия. Найти все здесь

webview.addEventListener('will-navigate', (e) => {

Теперь я должен выяснить, как перестать менять страницу в веб-просмотре. Но это открыть ссылку в браузере по умолчанию.

1
Adrian 31 Авг 2017 в 09:22

Если я понимаю темы на github, один из способов сделать это - использовать {{ X0}} вместо <iframe>. Затем поместите такой код в ваш процесс main.js / браузера НЕ в процесс рендерера.

app.on('web-contents-created', (event, contents) => {
  if (contents.getType() === 'webview') {
    contents.on('will-navigate', (event, url) => {
      event.preventDefault();
      shell.openExternal(url);
    });
  }
});

Вставка кода в процесс рендеринга не будет работать, по крайней мере, начиная с Electron 1.8.4

0
gman 19 Фев 2018 в 09:34

Вы обнаруживаете клики на a[href^="http"], но ваш тег iframe

На самом деле вы должны дать iframe id или что-то еще, а затем обработать свой клик по нему. например

<iframe id="myframe" src="...></iframe>

А также

const shell = require('electron').shell;

// assuming $ is jQuery
$(document).on('click', 'a[href^="http"]', function(event) {
    event.preventDefault();
    var iframe = document.getElementById('myframe')
    console.log(iframe, event.target) // what are these?
    if(iframe) {
       shell.openExternal(iframe.href);
    }
});
0
Fraser 29 Авг 2017 в 12:36