Я хочу открыть ссылку 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);
});
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) => {
Теперь я должен выяснить, как перестать менять страницу в веб-просмотре. Но это открыть ссылку в браузере по умолчанию.
Если я понимаю темы на 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
Вы обнаруживаете клики на 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);
}
});
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.