Skip to content

WebView

class cAlgo.API

DesktopCLICloud

Represents the web view control.

Environment behaviour

CLI — not supported. Accepted without error but never displayed, so control events such as Click are never raised.

Cloud — not supported. Accepted without error but never displayed, so control events such as Click are never raised.

Definition

public class WebView : ControlBase

Namespace: cAlgo.API · Group: Controls · Inherits: ControlBase

Examples

Example 1

using cAlgo.API;

namespace cAlgo.Robots
{
    public partial class WebViewOnChart : Robot
    {
        private WebView _webView;

        private TextBox _addressTextBox;

        private TextBox _scriptTextBox;

        private Button _executeScriptButton;

        protected override void OnStart()
        {
            var goBackButton = new Button
            {
                Text = "←",
                Margin = 3
            };

            goBackButton.Click += OnGoBackButtonClick;

            var goForwardButton = new Button
            {
                Text = "→",
                Margin = 3
            };

            goForwardButton.Click += OnGoForwardButtonClick;

            _addressTextBox = new TextBox
            {
                Text = "https://ctrader.com/",
                Margin = 3,
                Width = 150,
                MinWidth = 150,
                MaxWidth = 150
            };

            var goButton = new Button
            {
                Text = "→",
                Margin = 3
            };

            goButton.Click += OnGoButtonClick;

            var reloadButton = new Button
            {
                Text = "Reload",
                Margin = 3
            };

            reloadButton.Click += OnReloadButtonClick;

            var stopButton = new Button
            {
                Text = "x",
                Margin = 3
            };

            stopButton.Click += OnStopButtonClick;

            _scriptTextBox = new TextBox
            {
                Text = "alert('Hi');",
                Margin = 3,
                Width = 150,
                MinWidth = 150,
                MaxWidth = 150,
                IsEnabled = false
            };

            _executeScriptButton = new Button
            {
                Text = "Execute Script",
                Margin = 3,
                IsEnabled = false
            };

            _executeScriptButton.Click += OnExecuteScriptButtonClick;

            var addressBarPanel = new StackPanel
            {
                MaxHeight = 50,
                VerticalAlignment = VerticalAlignment.Top,
                BackgroundColor = Color.Black,
                Orientation = Orientation.Horizontal
            };

            addressBarPanel.AddChild(goBackButton);
            addressBarPanel.AddChild(goForwardButton);
            addressBarPanel.AddChild(_addressTextBox);
            addressBarPanel.AddChild(goButton);
            addressBarPanel.AddChild(reloadButton);
            addressBarPanel.AddChild(stopButton);
            addressBarPanel.AddChild(_scriptTextBox);
            addressBarPanel.AddChild(_executeScriptButton);

            _webView = new WebView
            {
                DefaultBackgroundColor = Color.Red
            };

            _webView.NavigationCompleted += OnWebViewNavigationCompleted;
            _webView.WebMessageReceived += OnWebViewWebMessageReceived;
            _webView.Loaded += OnWebViewLoaded;
            _webView.Unloaded += OnWebViewUnloaded;

            var mainGrid = new Grid(2, 1);

            mainGrid.Rows[0].SetHeightToAuto();
            mainGrid.Rows[1].SetHeightInStars(1);

            mainGrid.AddChild(addressBarPanel, 0, 0);
            mainGrid.AddChild(_webView, 1, 0);

            Chart.AddControl(mainGrid);

            _webView.NavigateAsync(_addressTextBox.Text);
        }

        private void OnWebViewLoaded(WebViewLoadedEventArgs args)
        {
            Print($"Webview loaded, IsLoaded: {args.WebView.IsLoaded}");
        }

        private void OnWebViewUnloaded(WebViewUnloadedEventArgs args)
        {
            Print($"Webview unloaded, IsLoaded: {args.WebView.IsLoaded}");
        }

        private void OnStopButtonClick(ButtonClickEventArgs args)
        {
            _webView.StopAsync();
        }

        private void OnExecuteScriptButtonClick(ButtonClickEventArgs args)
        {
            var result = _webView.ExecuteScript(_scriptTextBox.Text);

            Print($"IsSuccessful: {result.IsSuccessful} | Json: {result.Json}");
        }

        private void OnReloadButtonClick(ButtonClickEventArgs args)
        {
            _webView.ReloadAsync();
        }

        private void OnGoForwardButtonClick(ButtonClickEventArgs args)
        {
            _webView.GoForwardAsync();
        }

        private void OnGoBackButtonClick(ButtonClickEventArgs args)
        {
            _webView.GoBackAsync();
        }

        private void OnGoButtonClick(ButtonClickEventArgs args)
        {
            _webView.NavigateAsync(_addressTextBox.Text);
        }

        private void OnWebViewWebMessageReceived(WebViewWebMessageReceivedEventArgs args)
        {
            Print($"Source: {args.Source} | Message: {args.Message}");
        }

        private void OnWebViewNavigationCompleted(WebViewNavigationCompletedEventArgs args)
        {
            Print($"{args.HttpStatusCode} | {args.IsSuccessful} | {args.Url}");

            _addressTextBox.Text = args.Url;
            _scriptTextBox.IsEnabled = true;
            _executeScriptButton.IsEnabled = true;
        }
    }
}
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *
# Import trading wrapper functions
from robot_wrapper import *

class Test():
    def on_go_back_button_clicked(self, args):
        self.webView.GoBackAsync()

    def on_go_forward_button_clicked(self, args):
        self.webView.GoForwardAsync()

    def on_go_button_clicked(self, args):
        self.webView.NavigateAsync(self.addressTextBox.Text)

    def on_reload_button_clicked(self, args):
        self.webView.ReloadAsync()

    def on_stop_button_clicked(self, args):
        self.webView.StopAsync()

    def on_execute_script_button_clicked(self, args):
        result = self.webView.ExecuteScript(self.scriptTextBox.Text)
        api.Print(f"IsSuccessful: {result.IsSuccessful} | Json: {result.Json}")

    def on_web_view_navigation_completed(self, args):
        api.Print(f"{args.HttpStatusCode} | {args.IsSuccessful} | {args.Url}")
        self.addressTextBox.Text = args.Url
        self.scriptTextBox.IsEnabled = True
        self.executeScriptButton.IsEnabled = True

    def on_start(self):
        goBackButton = Button()
        goBackButton.Text = "←"
        goBackButton.Margin = Thickness(3)
        goBackButton.Click += self.on_go_back_button_clicked

        goForwardButton = Button()
        goForwardButton.Text = "→"
        goForwardButton.Margin = Thickness(3)
        goForwardButton.Click += self.on_go_forward_button_clicked

        self.addressTextBox = TextBox()
        self.addressTextBox.Text = "https://ctrader.com/"
        self.addressTextBox.Margin = Thickness(3)
        self.addressTextBox.Width = 150
        self.addressTextBox.MinWidth = 150
        self.addressTextBox.MaxWidth = 150

        goButton = Button()
        goButton.Text = "→"
        goButton.Margin = Thickness(3)
        goButton.Click += self.on_go_button_clicked

        reloadButton = Button()
        reloadButton.Text = "Reload"
        reloadButton.Margin = Thickness(3)
        reloadButton.Click += self.on_reload_button_clicked

        stopButton = Button()
        stopButton.Text = "x"
        stopButton.Margin = Thickness(3)
        stopButton.Click += self.on_stop_button_clicked

        self.scriptTextBox = TextBox()
        self.scriptTextBox.Text = "alert('Hi')"
        self.scriptTextBox.Margin = Thickness(3)
        self.scriptTextBox.Width = 150
        self.scriptTextBox.MinWidth = 150
        self.scriptTextBox.MaxWidth = 150
        self.scriptTextBox.IsEnabled = False

        self.executeScriptButton = Button()
        self.executeScriptButton.Text = "Execute Script"
        self.executeScriptButton.Margin = Thickness(3)
        self.executeScriptButton.IsEnabled = False
        self.executeScriptButton.Click += self.on_execute_script_button_clicked

        addressBarPanel = StackPanel()
        addressBarPanel.MaxHeight = 50
        addressBarPanel.VerticalAlignment = VerticalAlignment.Top
        addressBarPanel.BackgroundColor = Color.Black
        addressBarPanel.Orientation = Orientation.Horizontal

        addressBarPanel.AddChild(goBackButton)
        addressBarPanel.AddChild(goForwardButton)
        addressBarPanel.AddChild(self.addressTextBox)
        addressBarPanel.AddChild(goButton)
        addressBarPanel.AddChild(reloadButton)
        addressBarPanel.AddChild(stopButton)
        addressBarPanel.AddChild(self.scriptTextBox)
        addressBarPanel.AddChild(self.executeScriptButton)

        self.webView = WebView()
        self.webView.DefaultBackgroundColor = Color.Red
        self.webView.NavigationCompleted += self.on_web_view_navigation_completed
        self.webView.WebMessageReceived += lambda args: api.Print(f"Source: {args.Source} | Message: {args.Message}")
        self.webView.Loaded += lambda args: api.Print(f"Webview loaded, IsLoaded: {args.WebView.IsLoaded}")
        self.webView.Unloaded += lambda args: api.Print(f"Webview unloaded, IsLoaded: {args.WebView.IsLoaded}")

        self.webView.NavigateAsync(self.addressTextBox.Text)

        mainGrid = Grid(2, 1)

        mainGrid.Rows[0].SetHeightToAuto()
        mainGrid.Rows[1].SetHeightInStars(1)

        mainGrid.AddChild(addressBarPanel, 0, 0)
        mainGrid.AddChild(self.webView, 1, 0)

        api.Chart.AddControl(mainGrid)
{
  "AccessRights": "None"
}

Example 2

using cAlgo.API;

namespace cAlgo.Robots
{
    public partial class WebViewOnWindow : Robot
    {
        private WebView _webView;

        private TextBox _addressTextBox;

        private TextBox _scriptTextbox;

        private Button _executeScriptButton;

        protected override void OnStart()
        {
            var goBackButton = new Button
            {
                Text = "←",
                Margin = 3
            };

            goBackButton.Click += OnGoBackButtonClick;

            var goForwardButton = new Button
            {
                Text = "→",
                Margin = 3
            };

            goForwardButton.Click += OnGoForwardButtonClick;

            _addressTextBox = new TextBox
            {
                Text = "https://ctrader.com/",
                Margin = 3,
                Width = 150,
                MinWidth = 150,
                MaxWidth = 150
            };

            var goButton = new Button
            {
                Text = "→",
                Margin = 3
            };

            goButton.Click += OnGoButtonClick;

            var reloadButton = new Button
            {
                Text = "Reload",
                Margin = 3
            };

            reloadButton.Click += OnReloadButtonClick;

            var stopButton = new Button
            {
                Text = "x",
                Margin = 3
            };

            stopButton.Click += OnStopButtonClick;

            _scriptTextbox = new TextBox
            {
                Text = "alert('Hi');",
                Margin = 3,
                Width = 150,
                MinWidth = 150,
                MaxWidth = 150,
                IsEnabled = false
            };

            _executeScriptButton = new Button
            {
                Text = "Execute Script",
                Margin = 3,
                IsEnabled = false
            };

            _executeScriptButton.Click += OnExecuteScriptButtonClick;

            var addressBarPanel = new StackPanel
            {
                MaxHeight = 50,
                VerticalAlignment = VerticalAlignment.Top,
                BackgroundColor = Color.Black,
                Orientation = Orientation.Horizontal
            };

            addressBarPanel.AddChild(goBackButton);
            addressBarPanel.AddChild(goForwardButton);
            addressBarPanel.AddChild(_addressTextBox);
            addressBarPanel.AddChild(goButton);
            addressBarPanel.AddChild(reloadButton);
            addressBarPanel.AddChild(stopButton);
            addressBarPanel.AddChild(_scriptTextbox);
            addressBarPanel.AddChild(_executeScriptButton);

            _webView = new WebView
            {
                DefaultBackgroundColor = Color.Red
            };

            _webView.NavigationCompleted += OnWebViewNavigationCompleted;
            _webView.WebMessageReceived += OnWebViewWebMessageReceived;
            _webView.Loaded += OnWebViewLoaded;
            _webView.Unloaded += OnWebViewUnloaded;

            var mainGrid = new Grid(2, 1);

            mainGrid.Rows[0].SetHeightToAuto();
            mainGrid.Rows[1].SetHeightInStars(1);

            mainGrid.AddChild(addressBarPanel, 0, 0);
            mainGrid.AddChild(_webView, 1, 0);

            var window = new Window
            {
                Child = mainGrid
            };

            window.Show();

            _webView.NavigateAsync(_addressTextBox.Text);
        }

        private void OnWebViewLoaded(WebViewLoadedEventArgs args)
        {
            Print($"Webview loaded, IsLoaded: {args.WebView.IsLoaded}");
        }

        private void OnWebViewUnloaded(WebViewUnloadedEventArgs args)
        {
            Print($"Webview unloaded, IsLoaded: {args.WebView.IsLoaded}");
        }

        private void OnStopButtonClick(ButtonClickEventArgs args)
        {
            _webView.StopAsync();
        }

        private void OnExecuteScriptButtonClick(ButtonClickEventArgs args)
        {
            var result = _webView.ExecuteScript(_scriptTextbox.Text);

            Print($"IsSuccessful: {result.IsSuccessful} | Json: {result.Json}");
        }

        private void OnReloadButtonClick(ButtonClickEventArgs args)
        {
            _webView.ReloadAsync();
        }

        private void OnGoForwardButtonClick(ButtonClickEventArgs args)
        {
            _webView.GoForwardAsync();
        }

        private void OnGoBackButtonClick(ButtonClickEventArgs args)
        {
            _webView.GoBackAsync();
        }

        private void OnGoButtonClick(ButtonClickEventArgs args)
        {
            _webView.NavigateAsync(_addressTextBox.Text);
        }

        private void OnWebViewWebMessageReceived(WebViewWebMessageReceivedEventArgs args)
        {
            Print($"Source: {args.Source} | Message: {args.Message}");
        }

        private void OnWebViewNavigationCompleted(WebViewNavigationCompletedEventArgs args)
        {
            Print($"{args.HttpStatusCode} | {args.IsSuccessful} | {args.Url}");

            _addressTextBox.Text = args.Url;
            _scriptTextbox.IsEnabled = true;
            _executeScriptButton.IsEnabled = true;
        }
    }
}
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *
# Import trading wrapper functions
from robot_wrapper import *

class Test():
    def on_go_back_button_clicked(self, args):
        self.webView.GoBackAsync()

    def on_go_forward_button_clicked(self, args):
        self.webView.GoForwardAsync()

    def on_go_button_clicked(self, args):
        self.webView.NavigateAsync(self.addressTextBox.Text)

    def on_reload_button_clicked(self, args):
        self.webView.ReloadAsync()

    def on_stop_button_clicked(self, args):
        self.webView.StopAsync()

    def on_execute_script_button_clicked(self, args):
        result = self.webView.ExecuteScript(self.scriptTextBox.Text)
        api.Print(f"IsSuccessful: {result.IsSuccessful} | Json: {result.Json}")

    def on_web_view_navigation_completed(self, args):
        api.Print(f"{args.HttpStatusCode} | {args.IsSuccessful} | {args.Url}")
        self.addressTextBox.Text = args.Url
        self.scriptTextBox.IsEnabled = True
        self.executeScriptButton.IsEnabled = True

    def on_start(self):
        goBackButton = Button()
        goBackButton.Text = "←"
        goBackButton.Margin = Thickness(3)
        goBackButton.Click += self.on_go_back_button_clicked

        goForwardButton = Button()
        goForwardButton.Text = "→"
        goForwardButton.Margin = Thickness(3)
        goForwardButton.Click += self.on_go_forward_button_clicked

        self.addressTextBox = TextBox()
        self.addressTextBox.Text = "https://ctrader.com/"
        self.addressTextBox.Margin = Thickness(3)
        self.addressTextBox.Width = 150
        self.addressTextBox.MinWidth = 150
        self.addressTextBox.MaxWidth = 150

        goButton = Button()
        goButton.Text = "→"
        goButton.Margin = Thickness(3)
        goButton.Click += self.on_go_button_clicked

        reloadButton = Button()
        reloadButton.Text = "Reload"
        reloadButton.Margin = Thickness(3)
        reloadButton.Click += self.on_reload_button_clicked

        stopButton = Button()
        stopButton.Text = "x"
        stopButton.Margin = Thickness(3)
        stopButton.Click += self.on_stop_button_clicked

        self.scriptTextBox = TextBox()
        self.scriptTextBox.Text = "alert('Hi')"
        self.scriptTextBox.Margin = Thickness(3)
        self.scriptTextBox.Width = 150
        self.scriptTextBox.MinWidth = 150
        self.scriptTextBox.MaxWidth = 150
        self.scriptTextBox.IsEnabled = False

        self.executeScriptButton = Button()
        self.executeScriptButton.Text = "Execute Script"
        self.executeScriptButton.Margin = Thickness(3)
        self.executeScriptButton.IsEnabled = False
        self.executeScriptButton.Click += self.on_execute_script_button_clicked

        addressBarPanel = StackPanel()
        addressBarPanel.MaxHeight = 50
        addressBarPanel.VerticalAlignment = VerticalAlignment.Top
        addressBarPanel.BackgroundColor = Color.Black
        addressBarPanel.Orientation = Orientation.Horizontal

        addressBarPanel.AddChild(goBackButton)
        addressBarPanel.AddChild(goForwardButton)
        addressBarPanel.AddChild(self.addressTextBox)
        addressBarPanel.AddChild(goButton)
        addressBarPanel.AddChild(reloadButton)
        addressBarPanel.AddChild(stopButton)
        addressBarPanel.AddChild(self.scriptTextBox)
        addressBarPanel.AddChild(self.executeScriptButton)

        self.webView = WebView()
        self.webView.DefaultBackgroundColor = Color.Red
        self.webView.NavigationCompleted += self.on_web_view_navigation_completed
        self.webView.WebMessageReceived += lambda args: api.Print(f"Source: {args.Source} | Message: {args.Message}")
        self.webView.Loaded += lambda args: api.Print(f"Webview loaded, IsLoaded: {args.WebView.IsLoaded}")
        self.webView.Unloaded += lambda args: api.Print(f"Webview unloaded, IsLoaded: {args.WebView.IsLoaded}")

        self.webView.NavigateAsync(self.addressTextBox.Text)

        mainGrid = Grid(2, 1)

        mainGrid.Rows[0].SetHeightToAuto()
        mainGrid.Rows[1].SetHeightInStars(1)

        mainGrid.AddChild(addressBarPanel, 0, 0)
        mainGrid.AddChild(self.webView, 1, 0)

        window = Window()
        window.Child = mainGrid
        window.Show()
{
  "AccessRights": "None"
}

Constructors

Name Description
WebViewDesktopCLICloud Initializes a new instance of the WebView class.

Methods

Name Description
ExecuteScriptDesktopCLICloudExecuteScriptResult Executes JavaScript code from the javaScript parameter in the current top level document rendered in the WebView and returns the result. You can only use this method after control is fully loaded and navigation is completed.
ExecuteScriptAsync 2 overloadsDesktopCLICloudvoid Executes JavaScript code from the javaScript parameter in the current top level document rendered in the WebView. You can only use this method after control is fully loaded and navigation is completed.
GoBackAsyncDesktopCLICloudvoid Navigates asynchronously the WebView to the previous page in the navigation history.
GoForwardAsyncDesktopCLICloudvoid Navigates asynchronously the WebView to the next page in the navigation history.
NavigateAsyncDesktopCLICloudvoid Navigate asynchronously to another URL.
NavigateToStringAsyncDesktopCLICloudvoid Initiates a navigation asynchronously to html content as source HTML of a new document.
OpenDevToolsWindowDesktopCLICloudvoid Opens the DevTools window for the current WebView.
ReloadAsyncDesktopCLICloudvoid Reloads asynchronously the current page.
StopAsyncDesktopCLICloudvoid Stops asynchronously all navigations and pending resource fetches.

Properties

Name Description
DefaultBackgroundColorDesktopCLICloudColor Default background color of WebView.
IsLoadedDesktopCLICloudbool Returns True if WebView is loaded otherwise False.

Events

Name Description
LoadedDesktopCLICloudAction<WebViewLoadedEventArgs> Occurs after web view is loaded
NavigationCompletedDesktopCLICloudAction<WebViewNavigationCompletedEventArgs> Occurs when navigation of a page is completed.
UnloadedDesktopCLICloudAction<WebViewUnloadedEventArgs> Occurs after web view is unloaded
WebMessageReceivedDesktopCLICloudAction<WebViewWebMessageReceivedEventArgs> Occurs after web content sends a message

Inherited members

From ControlBase: ResetProperty, UniqueId, Style, Left, Top, Right, Bottom, Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight, IsEnabled, IsVisible, Opacity, Margin, VerticalAlignment, HorizontalAlignment, Dock, IsHitTestVisible