mirror of
https://github.com/electron/electron.git
synced 2026-05-02 03:00:22 -04:00
Merge pull request #4522 from deepak1556/async_execute_javascript_patch
webContents: provide responses for executeJavscript method
This commit is contained in:
@@ -10,6 +10,7 @@ const screen = require('electron').screen;
|
||||
|
||||
const app = remote.require('electron').app;
|
||||
const ipcMain = remote.require('electron').ipcMain;
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
const BrowserWindow = remote.require('electron').BrowserWindow;
|
||||
|
||||
const isCI = remote.getGlobal('isCi');
|
||||
@@ -690,4 +691,22 @@ describe('browser-window module', function() {
|
||||
assert.equal(fs.existsSync(serializedPath), false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('window.webContents.executeJavaScript', function() {
|
||||
var expected = 'hello, world!';
|
||||
var code = '(() => \"' + expected + '\")()';
|
||||
|
||||
it('doesnt throw when no calback is provided', function() {
|
||||
const result = ipcRenderer.sendSync('executeJavaScript', code, false);
|
||||
assert.equal(result, 'success');
|
||||
});
|
||||
|
||||
it('returns result when calback is provided', function(done) {
|
||||
ipcRenderer.send('executeJavaScript', code, true);
|
||||
ipcRenderer.once('executeJavaScript-response', function(event, result) {
|
||||
assert.equal(result, expected);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -138,4 +138,15 @@ app.on('ready', function() {
|
||||
});
|
||||
event.returnValue = "done";
|
||||
});
|
||||
|
||||
ipcMain.on('executeJavaScript', function(event, code, hasCallback) {
|
||||
if (hasCallback) {
|
||||
window.webContents.executeJavaScript(code, (result) => {
|
||||
window.webContents.send('executeJavaScript-response', result);
|
||||
});
|
||||
} else {
|
||||
window.webContents.executeJavaScript(code);
|
||||
event.returnValue = "success";
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -194,6 +194,7 @@ describe('<webview> tag', function() {
|
||||
document.body.appendChild(webview);
|
||||
});
|
||||
});
|
||||
|
||||
describe('partition attribute', function() {
|
||||
it('inserts no node symbols when not set', function(done) {
|
||||
webview.addEventListener('console-message', function(e) {
|
||||
@@ -356,6 +357,7 @@ describe('<webview> tag', function() {
|
||||
document.body.appendChild(webview);
|
||||
});
|
||||
});
|
||||
|
||||
describe('did-navigate-in-page event', function() {
|
||||
it('emits when an anchor link is clicked', function(done) {
|
||||
var p = path.join(fixtures, 'pages', 'webview-did-navigate-in-page.html');
|
||||
@@ -556,7 +558,7 @@ describe('<webview> tag', function() {
|
||||
done();
|
||||
};
|
||||
var listener2 = function() {
|
||||
var jsScript = 'document.getElementsByTagName("video")[0].webkitRequestFullScreen()';
|
||||
var jsScript = "document.querySelector('video').webkitRequestFullscreen()";
|
||||
webview.executeJavaScript(jsScript, true);
|
||||
webview.removeEventListener('did-finish-load', listener2);
|
||||
};
|
||||
@@ -565,6 +567,20 @@ describe('<webview> tag', function() {
|
||||
webview.src = "file://" + fixtures + "/pages/fullscreen.html";
|
||||
document.body.appendChild(webview);
|
||||
});
|
||||
|
||||
it('can return the result of the executed script', function(done) {
|
||||
var listener = function() {
|
||||
var jsScript = "'4'+2";
|
||||
webview.executeJavaScript(jsScript, false, function(result) {
|
||||
assert.equal(result, '42');
|
||||
done();
|
||||
});
|
||||
webview.removeEventListener('did-finish-load', listener);
|
||||
};
|
||||
webview.addEventListener('did-finish-load', listener);
|
||||
webview.src = "about:blank";
|
||||
document.body.appendChild(webview);
|
||||
});
|
||||
});
|
||||
|
||||
describe('sendInputEvent', function() {
|
||||
|
||||
Reference in New Issue
Block a user