From a1414de42fe1451bf7fadc2ad2a6c2035f309994 Mon Sep 17 00:00:00 2001 From: JoelEinbinder Date: Wed, 23 Aug 2017 14:08:56 -0700 Subject: [PATCH] Implement page.setJavaScriptEnabled method Fixes #462. --- docs/api.md | 6 ++++++ lib/Page.js | 7 +++++++ test/test.js | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/docs/api.md b/docs/api.md index e94c78b0189..5d6b67b4816 100644 --- a/docs/api.md +++ b/docs/api.md @@ -56,6 +56,7 @@ + [page.screenshot([options])](#pagescreenshotoptions) + [page.setContent(html)](#pagesetcontenthtml) + [page.setExtraHTTPHeaders(headers)](#pagesetextrahttpheadersheaders) + + [page.setJavaScriptEnabled(enabled)](#pagesetjavascriptenabledenabled) + [page.setRequestInterceptionEnabled(value)](#pagesetrequestinterceptionenabledvalue) + [page.setUserAgent(userAgent)](#pagesetuseragentuseragent) + [page.setViewport(viewport)](#pagesetviewportviewport) @@ -659,6 +660,11 @@ The extra HTTP headers will be sent with every request the page initiates. > **NOTE** page.setExtraHTTPHeaders does not guarantee the order of headers in the outgoing requests. +#### page.setJavaScriptEnabled(enabled) +- `enabled` <[boolean]> Whether or not to enabled JavaScript on the page. +- returns: <[Promise]> + +> **NOTE** changing this value won't affect scripts that have already been run. It will take full effect on the next [navigation](#pagegotourl-options). #### page.setRequestInterceptionEnabled(value) - `value` <[boolean]> Whether to enable request interception. diff --git a/lib/Page.js b/lib/Page.js index 35fb92781e8..1ae29623b8b 100644 --- a/lib/Page.js +++ b/lib/Page.js @@ -385,6 +385,13 @@ class Page extends EventEmitter { ]); } + /** + * @param {boolean} enabled + */ + async setJavaScriptEnabled(enabled) { + await this._client.send('Emulation.setScriptExecutionDisabled', { value: !enabled }); + } + /** * @param {?string} mediaType * @return {!Promise} diff --git a/test/test.js b/test/test.js index 2d9210e6894..f5e57ab3444 100644 --- a/test/test.js +++ b/test/test.js @@ -1696,6 +1696,24 @@ describe('Page', function() { })); }); + describe('Page.setJavaScriptEnabled', function() { + it('should work', SX(async function() { + await page.setJavaScriptEnabled(false); + await page.goto('data:text/html, '); + let error = null; + try { + await page.evaluate('something'); + } catch (e) { + error = e; + } + expect(error.message).toContain('something is not defined'); + + await page.setJavaScriptEnabled(true); + await page.goto('data:text/html, '); + expect(await page.evaluate('something')).toBe('forbidden'); + })); + }); + describe('Page.evaluateOnNewDocument', function() { it('should evaluate before anything else on the page', SX(async function() { await page.evaluateOnNewDocument(function(){