LoveAndCoding
LoveAndCoding

Reputation: 7947

How do I override window.screen?

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?

Upvotes: 4

Views: 2397

Answers (1)

LoveAndCoding
LoveAndCoding

Reputation: 7947

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
            };
    });
};

Upvotes: 1

Related Questions