Electron Remote JavaScript注入报错求助:executeJavaScript执行失败问题排查
解决Electron Remote注入JavaScript报错的问题
你折腾了一小时的引号问题其实不是核心原因——Instagram的页面默认并没有加载jQuery库,所以你在executeJavaScript里用的$函数根本不存在,这才是触发报错的关键。
给你两个直接可行的解决方案:
方案1:改用原生JavaScript(推荐)
直接用原生DOM API选择元素,不需要依赖第三方库,稳定性和兼容性更好:
const BrowserWindow = remote.BrowserWindow; const IGWin = new BrowserWindow({ show: false, webPreferences: { plugins: true, allowDisplayingInsecureContent: true }, }); IGWin.loadURL('https://instagram.com'); IGWin.once('ready-to-show', () => { IGWin.show(); IGWin.title = "TEST"; IGWin.webContents.on('did-finish-load', function() { setTimeout(function () { // 用原生querySelector替换jQuery的$语法 IGWin.webContents.executeJavaScript(`document.querySelector('input[name=username]').value = '1';`); }, 1100) }); })
方案2:先注入jQuery再执行代码
如果你一定要用jQuery语法,可以先在页面中加载jQuery脚本,再执行赋值逻辑:
const BrowserWindow = remote.BrowserWindow; const IGWin = new BrowserWindow({ show: false, webPreferences: { plugins: true, allowDisplayingInsecureContent: true }, }); IGWin.loadURL('https://instagram.com'); IGWin.once('ready-to-show', () => { IGWin.show(); IGWin.title = "TEST"; IGWin.webContents.on('did-finish-load', function() { setTimeout(function () { // 先动态注入jQuery,加载完成后再执行赋值操作 IGWin.webContents.executeJavaScript(` const script = document.createElement('script'); script.src = 'https://code.jquery.com/jquery-3.7.1.min.js'; script.onload = () => $('input[name=username]').val('1'); document.head.appendChild(script); `); }, 1100) }); })
额外提个小提醒:Electron从v14版本开始,内置的remote模块已经被标记为废弃,后续建议改用官方维护的@electron/remote包,或者通过IPC通信从主进程创建窗口,避免后续版本的兼容性问题。
内容的提问来源于stack exchange,提问作者Bootloader Project
相关产品推荐
相关产品推荐

