有没有办法在电子应用程序上伪造Document.visibilityState
?对于一个无法正确处理失去焦点的网站,我需要这个(它只会查看Document.visibilityState
,也应该查看Blur(。
最小化窗户的工作原理,但不方便。
编辑:我的用例是:我将网站包装在电子应用中。该网站正在查看Document.visibilityState
,以了解用户是否处于活动状态。问题在于,如果用户切换到另一个窗口,则可见性的"可见"仍然是"可见的"。该网站还应该查看模糊/焦点事件,但不是(不是我的网站(。我想自己处理模糊事件(我可以(,然后伪造Document.visibilityState
,因此知道它是不可见或专注的。
您可以使用类似于下面的脚本来覆盖值:
> document.__defineGetter__("visibilityState", function() { return "tarun";})
undefined
> document.visibilityState
"tarun"
现在,主要的事情是您要确定要更改值的方法。下面显示的是您可以与网页进行交互的方式:
const electron = require('electron')
// Importing BrowserWindow from Main Process using Electron remote
const BrowserWindow = electron.remote.BrowserWindow;
var inject = document.getElementById('inject');
let win = BrowserWindow.getFocusedWindow();
// let win = BrowserWindow.getAllWindows()[0];
inject.addEventListener('click', (event) => {
win.webContents.executeJavaScript('const path = require("path");'
+ 'const fs = require("fs");'
+ 'fs.readFile(path.join(__dirname, "../assets/sample.txt"), '
+ '{encoding: "utf-8"}, function(err, data) {'
+ 'if (!err) { console.log("received data: " + data); }'
+ 'else { console.log(err); } });', true)
.then(console.log('JavaScript Executed Successfully'));
});
var print = document.getElementById('print');
print.addEventListener('click', (event) => {
var webSource = {
code: 'var numbers = [1, 2, 3, 4, 5];'
+ 'function filters(num) { return num > 2; }'
+ 'console.log(numbers.filter(filters));',
url: '',
startLine: 1
}
win.webContents.executeJavaScriptInIsolatedWorld(1, [webSource], true)
.then(console.log('JavaScript Executed Successfully'));
});
ps:以上代码可在https://www.geeksforgeeks.org/dynamacy-execute-javascript-javascript-in-electronjs/