How do I override window.screen?

陌路散爱 提交于 2019-12-18 07:00:09

问题


I'm writing a simple PhantomJS app that scrapes particular pages looking for patterns. In one of these pages, the owner of the site is reading the window.screen width/height properties and changing the URL on me (which is cancelling the loading of the rest of the page). Setting the viewportSize changes the width/height values of the window, but not of the screen object.

Attempt 1

My first step was disabling navigation, like so:

tab.onLoadStarted = function () {
    tab.navigationLocked = true;
};

However, because this check is done in the <head>, it is causing the load event to fire, and sometimes the page hasn't fully loaded yet (which is causing lots of other issues).

Attempt 2

I tried overriding the screen object at the first load:

tab.onLoadStarted = function () {
    tab.evaluate(function () {
        window.screen = {
                width: 1920,
                height: 1080
            };
    });
};

However, that property is read-only, so setting it does nothing to change the value.

tl;dr

In PhantomJS, is there a way to override the window.screen value to set my own screen size?


回答1:


You can't set the window.screen values in the LoadStarted event, but you can in the Intialized event. So, instead, the code would look like this:

tab.onInitialized = function () {
    tab.evaluate(function () {
        window.screen = {
                width: 1920,
                height: 1080
            };
    });
};


来源:https://stackoverflow.com/questions/25045727/how-do-i-override-window-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!