diff --git a/src/frames.ts b/src/frames.ts
index 2a093e65b8..33128fd4c6 100644
--- a/src/frames.ts
+++ b/src/frames.ts
@@ -471,8 +471,9 @@ export class Frame {
// In case of multiple sessions to the same target, there's a race between
// connections so we might end up creating multiple isolated worlds.
// We can use either.
- if (!world.context)
- this._setContext(worldType, context);
+ if (world.context)
+ this._setContext(worldType, null);
+ this._setContext(worldType, context);
}
_contextDestroyed(context: js.ExecutionContext) {
diff --git a/src/webkit/Page.ts b/src/webkit/Page.ts
index bf7272ed2f..6a78435d1c 100644
--- a/src/webkit/Page.ts
+++ b/src/webkit/Page.ts
@@ -348,6 +348,13 @@ export class Page extends EventEmitter {
await this._session.send('Page.setBootstrapScript', { source });
}
+ async setJavaScriptEnabled(enabled: boolean) {
+ if (this._javascriptEnabled === enabled)
+ return;
+ this._javascriptEnabled = enabled;
+ await this._session.send('Emulation.setJavaScriptEnabled', { enabled });
+ }
+
async setCacheEnabled(enabled: boolean = true) {
await this._frameManager.networkManager().setCacheEnabled(enabled);
}
diff --git a/test/page.spec.js b/test/page.spec.js
index ca678a37c7..a2dab9a638 100644
--- a/test/page.spec.js
+++ b/test/page.spec.js
@@ -831,12 +831,15 @@ module.exports.addTests = function({testRunner, expect, headless, playwright, FF
});
describe('Page.setJavaScriptEnabled', function() {
- it.skip(WEBKIT)('should work', async({page, server}) => {
+ it('should work', async({page, server}) => {
await page.setJavaScriptEnabled(false);
await page.goto('data:text/html, ');
let error = null;
await page.evaluate('something').catch(e => error = e);
- expect(error.message).toContain('something is not defined');
+ if (WEBKIT)
+ expect(error.message).toContain('Can\'t find variable: something');
+ else
+ expect(error.message).toContain('something is not defined');
await page.setJavaScriptEnabled(true);
await page.goto('data:text/html, ');