Chrome 如何将Electron中的'location.href'重写为自定义URL?

ie3xauqp  于 2023-03-06  发布在  Go
关注(0)|答案(2)|浏览(300)

描述

是否可以在Electron.js中修改或覆盖感知的当前位置和原点?
我在Electron中加载一个本地. html文件,需要手动覆盖location.hrefdocument.domain和所有其他对当前位置的引用,使其指向https://example.com/my/page,以便某些外部库(例如reCAPTCHA)能够使用本地页面。
有没有可能将当前位置设置为example.com,* 而 * 实际上不向远程URL发出请求,以便页面上的任何javascript * 认为 * 当前URL是example.com,而不是app://....

我所尝试的

在我的测试中,我通过运行一个拦截HTTPS请求的MITM代理来实现它,而不是向源发出请求,而是用一个本地生成的html页面来响应,因此我可以将实际内容注入其中。
然而,我不想采用这种方法,我想知道电子是否可以在加载本地文件时伪装成一个自定义URL,并使用适当的location/origin报告页面上的任何内容。

wtzytmuj

wtzytmuj1#

session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
    //console.log(details);
    //details.requestHeaders['User-Agent'] = 'MyAgent';
    details.requestHeaders['Origin'] = 'https://example.com/my/page';
    callback({cancel: false, requestHeaders: details.requestHeaders});
});

你有没有试过上面的处理程序,你可以修改头的来源参数.让我知道如果它.不同的第三方服务将无法工作,如果你的应用程序是使用文件协议加载,你也可以尝试加载/服务的html文件使用http服务器运行在电子应用程序引导.为此,你可以尝试服务它使用一个快速服务器.
参考文献:https://github.com/electron/electron/issues/6859

yc0p9oo0

yc0p9oo02#

您可以使用BrowserWindowAPI将location.href属性覆盖为自定义URL。

const { app, BrowserWindow } = require('electron')

// Create a new BrowserWindow instance
let mainWindow

app.on('ready', () => {
  // Create the main window
  mainWindow = new BrowserWindow({ width: 800, height: 600 })

  // Override the location.href property to a custom URL
  Object.defineProperty(mainWindow.webContents, 'location', {
    get: function() { return 'http://www.example.com' },
    set: function() {}
  })

  // Load the main window
  mainWindow.loadURL('about:blank')
})

我们创建一个新的BrowserWindow示例,并将location.href属性覆盖为URL**http://www.example.com。为此,我们使用Object.defineProperty()BrowserWindow示例的webContents对象上定义一个新属性。get函数返回自定义URL,而set函数不执行任何操作(以防止任何设置属性的尝试)。
我们使用
loadURL()**方法加载一个带有空白页面的主窗口。2当窗口加载时,location.href属性将被设置为get函数中指定的自定义URL。

相关问题