From 8e445734c6e8f0462363bb9799e489ce3b332b33 Mon Sep 17 00:00:00 2001 From: Xingan Wang Date: Mon, 6 Nov 2017 22:04:40 -0800 Subject: [PATCH] feat(Frame): reject error for addScriptTag/addStyleTag (#1287) fix #1221 --- lib/FrameManager.js | 30 ++++++++++++++++++++++++------ test/test.js | 22 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib/FrameManager.js b/lib/FrameManager.js index ab645e7c9ea..b2db9cdf2c3 100644 --- a/lib/FrameManager.js +++ b/lib/FrameManager.js @@ -326,8 +326,14 @@ class Frame { * @return {!Promise} */ async addScriptTag(options) { - if (typeof options.url === 'string') - return this._context.evaluateHandle(addScriptUrl, options.url); + if (typeof options.url === 'string') { + const url = options.url; + try { + return await this._context.evaluateHandle(addScriptUrl, url); + } catch (error) { + throw new Error(`Loading script from ${url} failed`); + } + } if (typeof options.path === 'string') { let contents = await readFileAsync(options.path, 'utf8'); @@ -349,7 +355,10 @@ class Frame { const script = document.createElement('script'); script.src = url; document.head.appendChild(script); - await new Promise(x => script.onload = x); + await new Promise((res, rej) => { + script.onload = res; + script.onerror = rej; + }); return script; } @@ -371,8 +380,14 @@ class Frame { * @return {!Promise} */ async addStyleTag(options) { - if (typeof options.url === 'string') - return await this._context.evaluateHandle(addStyleUrl, options.url); + if (typeof options.url === 'string') { + const url = options.url; + try { + return await this._context.evaluateHandle(addStyleUrl, url); + } catch (error) { + throw new Error(`Loading style from ${url} failed`); + } + } if (typeof options.path === 'string') { let contents = await readFileAsync(options.path, 'utf8'); @@ -395,7 +410,10 @@ class Frame { link.rel = 'stylesheet'; link.href = url; document.head.appendChild(link); - await new Promise(x => link.onload = x); + await new Promise((res, rej) => { + link.onload = res; + link.onerror = rej; + }); return link; } diff --git a/test/test.js b/test/test.js index 049c3cba8dd..c6d49d3df4c 100644 --- a/test/test.js +++ b/test/test.js @@ -2406,6 +2406,17 @@ describe('Page', function() { expect(await page.evaluate(() => __injected)).toBe(42); })); + it('should throw an error if loading from url fail', SX(async function() { + await page.goto(EMPTY_PAGE); + let error = null; + try { + await page.addScriptTag({ url: '/nonexistfile.js' }); + } catch (e) { + error = e; + } + expect(error.message).toBe('Loading script from /nonexistfile.js failed'); + })); + it('should work with a path', SX(async function() { await page.goto(EMPTY_PAGE); const scriptHandle = await page.addScriptTag({ path: path.join(__dirname, 'assets/injectedfile.js') }); @@ -2446,6 +2457,17 @@ describe('Page', function() { expect(await page.evaluate(`window.getComputedStyle(document.querySelector('body')).getPropertyValue('background-color')`)).toBe('rgb(255, 0, 0)'); })); + it('should throw an error if loading from url fail', SX(async function() { + await page.goto(EMPTY_PAGE); + let error = null; + try { + await page.addStyleTag({ url: '/nonexistfile.js' }); + } catch (e) { + error = e; + } + expect(error.message).toBe('Loading style from /nonexistfile.js failed'); + })); + it('should work with a path', SX(async function() { await page.goto(EMPTY_PAGE); const styleHandle = await page.addStyleTag({ path: path.join(__dirname, 'assets/injectedstyle.css') });