gpt4 book ai didi

javascript - 阻止了源为 "file://"的框架访问跨域框架

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:23 25 4
gpt4 key购买 nike

electron从4.1.4升级到5.0.0后报错

Blocked a frame with origin "file://" from accessing a cross-origin frame. at HTMLIFrameElement.preload (renderer.js:31:78)

我添加了 new BrowserWindow({ webPreferences }) 如图所示 here但这个错误仍然存​​在。

这是我的 index.html

<html>
<head>
<meta charset="UTF-8">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
</head>
<body>
<iframe data-bind="visible: showIframe, attr:{src:appUrl}" allow="autoplay; geolocation; microphone; camera" allowfullscreen></iframe>
</body>
<script>
require('./renderer.js');
</script>
</html>

这是来自 main.js 的一些代码

  const {
autoUpdater
} = require('electron-updater');
const platform = require('os').platform();
const electron = require('electron');
const fs = require('fs-extra');
const CronJob = require('cron').CronJob;
const {
app,
BrowserWindow,
Tray,
Menu,
ipcMain
} = electron;
const path = require('path');
const url = require('url');

const {
appConf, uiConf
} = require('./config.json');


// Deep linked url
let deeplinkingUrl;
//global reference for main window
let mainWindow = null;
let mainWindowWidth = 1100;
let mainWindowHeight = 650;
if (uiConf.width) {
mainWindowWidth = uiConf.width;
}
if (uiConf.height) {
mainWindowHeight = uiConf.height;
}

app.on('ready', (e) => {
createWindow();
});

/**
* creating main window for app
*/
function createWindow () {
// Create the browser window.
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
webSecurity: false
},
minWidth: mainWindowWidth,
width: mainWindowWidth,
minHeight: mainWindowHeight,
height: mainWindowHeight,
icon: path.join(__dirname, appConf.appIcon),
title: appConf.appName,
show: false
});

mainWindow.once('ready-to-show', () => {
mainWindow.show();
});

mainWindow.setMenu(null);

// and load the index.html of the app.
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}));

// Open the DevTools.
mainWindow.webContents.openDevTools();

}

这是我的 renderer.js

(function () {
const {
ipcRenderer,
shell
} = require('electron');
const {
appConf
} = require('./config.json');

const checkInternetConnected = require('check-internet-connected');

/*
* For screenshare
*/
var appFrame = document.getElementsByTagName('iframe')[0];

function preload() {
document.getElementsByTagName('iframe')[0].contentWindow.desktopCapturer = require('electron').desktopCapturer;
document.getElementsByTagName('iframe')[0].contentWindow.electronOpenUrl = openUrlElectron;
document.getElementsByTagName('iframe')[0].contentWindow.deviceType = 'win';
}

appFrame.addEventListener('load', preload);

function sendToIFrame(type, data) {
appFrame.contentWindow.postMessage({
type: type,
data: data
}, "*");
}
function openUrlElectron(url) {
shell.openExternal(url);
}
// codes...
// codes...
// codes...
})();

该应用程序现在运行良好,但我知道我的 desktopCapturer 将无法运行。我认为 contentWindow 脚本提升导致了这个问题或其他我不知道的问题。

最佳答案

这是 Chrome 67 默认启用站点隔离安全功能后的一个已知问题,它会反射(reflect)在任何使用包含它的 Chromium 版本的框架中(例如 Electron 5+)

http://www.chromium.org/Home/chromium-security/site-isolation

When debugging with --disable-web-security, it may also be necessary to disable Site Isolation (using --disable-features=IsolateOrigins,site-per-process) to access cross-origin frames.

这里有一些关于它的悬而未决的问题

https://github.com/electron/electron/issues/18214
https://github.com/cypress-io/cypress/issues/1951

在 Electron 5+ 中,在解决此问题之前,您可以在应用“就绪”事件之前添加此行

app.commandLine.appendSwitch('disable-site-isolation-trials');

关于javascript - 阻止了源为 "file://"的框架访问跨域框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com