项目场景:
客户端使用cef框架,在自己内部页面中用iframe嵌入第三方游戏广告。
问题描述
在使用iframe嵌入第三方页面的同时不开启沙盒隔离,第三方页面内的操作让主窗口location.href改变,导致整个客户端页面都展示成第三方页面。使用沙盒又会让第三方链接页面展示异常~
解决方案:
方案1
使用cef框架,在前端层面无法拦截第三方内嵌直接修改window.top.location.href=“xxxxx”。最好的解决方案是和第三方技术人员拉扯一下,让对方不要直接改动顶层窗口的href。
方案2
- 改成Electron框架,在 Electron 中,可以监听 will-navigate 事件,并决定是否阻止即将发生的导航:
const createWindow = () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
partition: '',
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false, // 禁用 Node.js 集成
contextIsolation: true // 开启上下文隔离
}
})
mainWindow.loadFile('index.html')
mainWindow.webContents.on('will-navigate', (event, url) => {
// 根据实际需要检查 URL
if (url !== 'index.html') {
event.preventDefault();
}
});
}