首页 > 解决方案 > 电子中的假 Document.visibilityState

问题描述

有没有办法Document.visibilityState在电子应用程序上伪造?对于一个不能正确处理失去焦点的网站(它只关注Document.visibilityState并且应该关注模糊),我需要它。

最小化窗口有效,但不方便。

编辑:我的用例是:我将网站包装在电子应用程序中。该网站正在查看Document.visibilityState用户是否处于活动状态。问题是如果用户切换到另一个窗口,visibilityState 仍然是“可见的”。该站点还应该查看模糊/焦点事件,但它不是(它不是我的网站)。我想自己处理模糊事件(我可以),并且假装Document.visibilityState知道它不可见或不聚焦。

标签: javascriptelectron

解决方案


您可以使用类似于下面的脚本来覆盖这些值:

> 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/dynamically-execute-javascript-in-electronjs/


推荐阅读