mirror of
https://github.com/ElectronNET/Electron.NET.git
synced 2026-02-04 05:34:51 +00:00
Merge pull request #813 from softworkz/submit_execjs_domready
WebContents: add executeJavaScript and dom-ready event
This commit is contained in:
@@ -262,6 +262,35 @@ public class WebContents
|
||||
|
||||
private event Action<InputEvent> _inputEvent;
|
||||
|
||||
/// <summary>
|
||||
/// Emitted when the document in the top-level frame is loaded.
|
||||
/// </summary>
|
||||
public event Action OnDomReady
|
||||
{
|
||||
add
|
||||
{
|
||||
if (_domReady == null)
|
||||
{
|
||||
BridgeConnector.Socket.On("webContents-domReady" + Id, () =>
|
||||
{
|
||||
_domReady();
|
||||
});
|
||||
|
||||
BridgeConnector.Socket.Emit("register-webContents-domReady", Id);
|
||||
}
|
||||
_domReady += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
_domReady -= value;
|
||||
|
||||
if (_domReady == null)
|
||||
BridgeConnector.Socket.Off("webContents-domReady" + Id);
|
||||
}
|
||||
}
|
||||
|
||||
private event Action _domReady;
|
||||
|
||||
internal WebContents(int id)
|
||||
{
|
||||
Id = id;
|
||||
@@ -363,6 +392,37 @@ public class WebContents
|
||||
return taskCompletionSource.Task;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Evaluates script code in page.
|
||||
/// </summary>
|
||||
/// <param name="code">The code to execute.</param>
|
||||
/// <param name="userGesture">if set to <c>true</c> simulate a user gesture.</param>
|
||||
/// <returns>The result of the executed code.</returns>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// In the browser window some HTML APIs like `requestFullScreen` can only be
|
||||
/// invoked by a gesture from the user. Setting `userGesture` to `true` will remove
|
||||
/// this limitation.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Code execution will be suspended until web page stop loading.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
public Task<object> ExecuteJavaScriptAsync(string code, bool userGesture = false)
|
||||
{
|
||||
var taskCompletionSource = new TaskCompletionSource<object>();
|
||||
|
||||
BridgeConnector.Socket.On("webContents-executeJavaScript-completed", (result) =>
|
||||
{
|
||||
BridgeConnector.Socket.Off("webContents-executeJavaScript-completed");
|
||||
taskCompletionSource.SetResult(result);
|
||||
});
|
||||
|
||||
BridgeConnector.Socket.Emit("webContents-executeJavaScript", Id, code, userGesture);
|
||||
|
||||
return taskCompletionSource.Task;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Is used to get the Url of the loaded page.
|
||||
/// It's usefull if a web-server redirects you and you need to know where it redirects. For instance, It's useful in case of Implicit Authorization.
|
||||
|
||||
@@ -63,6 +63,16 @@ module.exports = (socket) => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('register-webContents-domReady', (id) => {
|
||||
const browserWindow = getWindowById(id);
|
||||
|
||||
browserWindow.webContents.removeAllListeners('dom-ready');
|
||||
browserWindow.webContents.on('dom-ready', () => {
|
||||
electronSocket.emit('webContents-domReady' + id);
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('webContentsOpenDevTools', (id, options) => {
|
||||
if (options) {
|
||||
getWindowById(id).webContents.openDevTools(options);
|
||||
@@ -90,6 +100,12 @@ module.exports = (socket) => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => {
|
||||
const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture);
|
||||
electronSocket.emit('webContents-executeJavaScript-completed', result);
|
||||
});
|
||||
|
||||
socket.on('webContents-getUrl', function (id) {
|
||||
const browserWindow = getWindowById(id);
|
||||
electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL());
|
||||
|
||||
@@ -80,6 +80,15 @@ export = (socket: Socket) => {
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('register-webContents-domReady', (id) => {
|
||||
const browserWindow = getWindowById(id);
|
||||
|
||||
browserWindow.webContents.removeAllListeners('dom-ready');
|
||||
browserWindow.webContents.on('dom-ready', () => {
|
||||
electronSocket.emit('webContents-domReady' + id);
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('webContentsOpenDevTools', (id, options) => {
|
||||
if (options) {
|
||||
getWindowById(id).webContents.openDevTools(options);
|
||||
@@ -110,6 +119,11 @@ export = (socket: Socket) => {
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => {
|
||||
const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture);
|
||||
electronSocket.emit('webContents-executeJavaScript-completed', result);
|
||||
});
|
||||
|
||||
socket.on('webContents-getUrl', function (id) {
|
||||
const browserWindow = getWindowById(id);
|
||||
electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL());
|
||||
|
||||
Reference in New Issue
Block a user