Пример #1
0
        void WebBrowserV1_NewWindow(string url, int flags, string targetFrameName, ref object postData, string headers, ref bool processed)
        {
            var e = new WebViewNewWindowEventArgs(new Uri(url), targetFrameName);

            Callback.OnOpenNewWindow(Widget, e);
            processed = e.Cancel;
        }
Пример #2
0
        void WebBrowserV1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
        {
            var e = new WebViewNewWindowEventArgs(new Uri(URL), TargetFrameName);

            Widget.OnOpenNewWindow(e);
            Processed = e.Cancel;
        }
        private void WebViewHandler_DecidePolicy(object o, GLib.SignalArgs args)
        {
            var decision = (GLib.Object)args.Args[0];
            var type     = (int)args.Args[1];

            if (type != 0 && type != 1)
            {
                return;
            }

            var request = NativeMethods.webkit_navigation_policy_decision_get_request(decision.Handle);
            var uri     = new Uri(NativeMethods.webkit_uri_request_get_uri(request));

            switch (type)
            {
            case 0:                     // WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION
                var loadingArgs = new WebViewLoadingEventArgs(uri, true);
                documentLoading?.Invoke(this, loadingArgs);
                args.RetVal = loadingArgs.Cancel;
                break;

            case 1:                     // WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION
                var newWindowArgs = new WebViewNewWindowEventArgs(uri, "");
                openNewWindow?.Invoke(this, newWindowArgs);
                args.RetVal = newWindowArgs.Cancel;
                break;
            }
        }
Пример #4
0
            public void HandleNewWindowPolicyDecisionRequested(object sender, NewWindowPolicyDecisionRequestedArgs args)
            {
                var handler = Handler;
                var e       = new WebViewNewWindowEventArgs(new Uri(args.Request.Uri), args.Frame.Name);

                handler.Callback.OnOpenNewWindow(handler.Widget, e);
                                #if GTK2
                if (e.Cancel)
                {
                    args.Decision.Ignore();
                }
                else
                {
                    args.Decision.Use();
                }
                                #else
                if (e.Cancel)
                {
                    args.PolicyDecision.Ignore();
                }
                else
                {
                    args.PolicyDecision.Use();
                }
                                #endif
                args.RetVal = true;
            }
Пример #5
0
            public void HandleNewWindowPolicyDecisionRequested(object sender, NewWindowPolicyDecisionRequestedArgs args)
            {
                var handler = Handler;
                var e       = new WebViewNewWindowEventArgs(new Uri(args.Request.Uri), args.Frame.Name);

                handler.Callback.OnOpenNewWindow(handler.Widget, e);
                                #if GTK2
                var decision = args.Decision;
                                #else
                var decision = args.PolicyDecision;
                                #endif
                if (decision != null)
                {
                    if (e.Cancel)
                    {
                        decision.Ignore();
                    }
                    else
                    {
                        decision.Use();
                        Application.Instance.Open(args.Request.Uri);
                    }
                }
                args.RetVal = true;
            }
Пример #6
0
        private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
        {
            var args = new WebViewNewWindowEventArgs(new Uri(e.Uri), null);

            Callback.OnOpenNewWindow(Widget, args);
            e.Handled = args.Cancel;
        }
Пример #7
0
        void WebEvents_NewWindow(string url, int flags, string targetFrameName, ref object postData, string headers, ref bool processed)
        {
            var args = new WebViewNewWindowEventArgs(new Uri(url), targetFrameName);

            Widget.OnOpenNewWindow(args);
            processed = args.Cancel;
        }
Пример #8
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.DocumentLoadedEvent:
                this.Control.FinishedLoad += delegate(object sender, MonoMac.WebKit.WebFrameEventArgs e) {
                    Widget.OnDocumentLoaded(new WebViewLoadedEventArgs(this.Url));
                };
                break;

            case WebView.DocumentLoadingEvent:
                this.Control.DecidePolicyForNavigation += (sender, e) => {
                    var args = new WebViewLoadingEventArgs(new Uri(e.Request.Url.AbsoluteString), e.Frame == Control.MainFrame);
                    Widget.OnDocumentLoading(args);
                    if (args.Cancel)
                    {
                        e.DecisionToken.PerformSelector(new Selector("ignore"), null, 0);
                    }
                    else
                    {
                        e.DecisionToken.PerformSelector(new Selector("use"), null, 0);
                    }
                };
                break;

            case WebView.OpenNewWindowEvent:
                this.Control.UICreateWebView = new MonoMac.WebKit.CreateWebViewFromRequest((sender, e) => {
                    newWindowHandler = new NewWindowHandler {
                        Handler = this
                    };
                    return(newWindowHandler.WebView);
                });
                this.Control.DecidePolicyForNewWindow += (sender, e) => {
                    var args = new WebViewNewWindowEventArgs(new Uri(e.Request.Url.AbsoluteString), e.NewFrameName);
                    Widget.OnOpenNewWindow(args);
                    if (!args.Cancel)
                    {
                        NSWorkspace.SharedWorkspace.OpenUrl(e.Request.Url);
                    }
                    e.DecisionToken.PerformSelector(new Selector("ignore"), null, 0);
                };
                break;

            case WebView.DocumentTitleChangedEvent:
                this.Control.ReceivedTitle += delegate(object sender, MonoMac.WebKit.WebFrameTitleEventArgs e) {
                    Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(e.Title));
                };
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
Пример #9
0
        private void TwitchOnOpenNewWindow(object sender, WebViewNewWindowEventArgs e)
        {
            if (Platform.IsGtk) //Linux needs xdg-open
            {
                Process.Start("xdg-open", e.Uri.ToString());
            }

            if (Platform.IsWpf || Platform.IsWinForms) //Windows will just use whatever is configured as default!
            {
                Process.Start(e.Uri.ToString());
            }
        }
Пример #10
0
            public void DecidePolicyForNavigation(wk.WebView webView, NSDictionary action, NSUrlRequest request, wk.WebFrame frame, NSObject listener)
            {
                var url  = action.ObjectForKey(new NSString("WebActionOriginalURLKey")) as NSUrl;
                var args = new WebViewNewWindowEventArgs(new Uri(url.AbsoluteString), frame.Name);

                Handler.Widget.OnOpenNewWindow(args);
                if (!args.Cancel)
                {
                    NSWorkspace.SharedWorkspace.OpenUrl(url);
                }
                listener.PerformSelector(selIgnore, null, 0);
            }
Пример #11
0
        public bool OnBeforePopup(CefSharp.IWebBrowser browser, string url, ref int x, ref int y, ref int width, ref int height)
        {
            var uri = new Uri(url);

            if (uri.Scheme != "chrome-devtools")
            {
                var args = new WebViewNewWindowEventArgs(uri, null);
                Widget.OnOpenNewWindow(args);
                return(args.Cancel);
            }
            return(false);
        }
Пример #12
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.DocumentLoadedEvent:
                Control.LoadingStateChanged += (sender, e) =>
                {
                    if (!Control.Browser.IsLoading)
                    {
                        Control.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            Widget.OnDocumentLoaded(new WebViewLoadedEventArgs(this.Url));
                        }));
                    }
                };
                break;

            case WebView.DocumentLoadingEvent:
                Control.BeforeNavigation += (sender, e) =>
                {
                    var args = new WebViewLoadingEventArgs(new Uri(e.Request.Url), e.Frame.IsMain);
                    Widget.OnDocumentLoading(args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.OpenNewWindowEvent:
                Control.BeforePopup += (sender, e) =>
                {
                    var uri = new Uri(e.TargetUrl);
                    if (uri.Scheme != "chrome-devtools")
                    {
                        var args = new WebViewNewWindowEventArgs(uri, null);
                        Widget.OnOpenNewWindow(args);
                        e.Cancel = args.Cancel;
                    }
                };
                break;

            case WebView.DocumentTitleChangedEvent:
                Control.TitleChanged += (sender, e) => {
                    Control.Dispatcher.BeginInvoke(new Action(() => {
                        Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(Control.Title));
                    }));
                };
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
Пример #13
0
        static void HandleDecidePolicyForNewWindow(object sender, wk.WebNewWindowPolicyEventArgs e)
        {
            var handler = GetHandler(sender) as WebViewHandler;

            if (handler != null)
            {
                var args = new WebViewNewWindowEventArgs(new Uri(e.Request.Url.AbsoluteString), e.NewFrameName);
                handler.Widget.OnOpenNewWindow(args);
                if (!args.Cancel)
                {
                    NSWorkspace.SharedWorkspace.OpenUrl(e.Request.Url);
                }
                e.DecisionToken.PerformSelector(selIgnore, null, 0);
            }
        }
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.DocumentLoadedEvent:
                Control.LoadingFrameComplete += (sender, e) => {
                    Control.Dispatcher.BeginInvoke(new Action(() => {
                        Widget.OnDocumentLoaded(new WebViewLoadedEventArgs(this.Url));
                    }));
                };
                break;

            case WebView.DocumentLoadingEvent:
                Control.BeginNavigation += (sender, e) => {
                    // this doesn't actually work, but is needed for our use!
                    //Control.LoadingFrame += (sender, e) => {
                    var args = new WebViewLoadingEventArgs(e.Url, true);
                    Widget.OnDocumentLoading(args);
                    if (args.Cancel)
                    {
                        Control.Stop();                          // does not work!!
                    }
                };
                break;

            case WebView.OpenNewWindowEvent:
                Control.ShowCreatedWebView += (sender, e) => {
                    var args = new WebViewNewWindowEventArgs(e.TargetURL, null);
                    Widget.OnOpenNewWindow(args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.DocumentTitleChangedEvent:
                Control.TitleChanged += (sender, e) => {
                    Control.Dispatcher.BeginInvoke(new Action(() => {
                        Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(e.Title));
                    }));
                };
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
Пример #15
0
 private static void Browser_OpenNewWindow(object sender, WebViewNewWindowEventArgs e)
 {
     e.Cancel = true;
 }
Пример #16
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.DocumentLoadedEvent:
                Control.LoadFinished += delegate(object o, WebKit.LoadFinishedArgs args) {
                    Widget.OnDocumentLoaded(new WebViewLoadedEventArgs(args.Frame.Uri != null ? new Uri(args.Frame.Uri) : null));
                };
                break;

            case WebView.DocumentLoadingEvent:
                Control.NavigationRequested += delegate(object o, WebKit.NavigationRequestedArgs args) {
                    if (args.Request.Uri.StartsWith(EtoReturnPrefix))
                    {
                        // pass back the response to ExecuteScript()
                        this.scriptReturnValue = HttpUtility.UrlDecode(args.Request.Uri.Substring(EtoReturnPrefix.Length));
                        returnResetEvent.Set();
                        args.RetVal = WebKit.NavigationResponse.Ignore;
                    }
                    else
                    {
                        var e = new WebViewLoadingEventArgs(new Uri(args.Request.Uri), false);
                        Widget.OnDocumentLoading(e);
                        if (e.Cancel)
                        {
                            args.RetVal = WebKit.NavigationResponse.Ignore;
                        }
                        else
                        {
                            args.RetVal = WebKit.NavigationResponse.Accept;
                        }
                    }
                };
                break;

            case WebView.OpenNewWindowEvent:
                // note: requires libwebkitgtk 1.1.4+
                Control.NewWindowPolicyDecisionRequested += (sender, args) => {
                    var e = new WebViewNewWindowEventArgs(new Uri(args.Request.Uri), args.Frame.Name);
                    Widget.OnOpenNewWindow(e);
                    if (e.Cancel)
                    {
                        args.Decision.Ignore();
                    }
                    else
                    {
                        args.Decision.Use();
                    }
                    args.RetVal = true;
                };
                break;

            case WebView.DocumentTitleChangedEvent:
                Control.TitleChanged += delegate(object o, WebKit.TitleChangedArgs args) {
                    Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(args.Title));
                };
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
Пример #17
0
 void HandleOpenNewWindow(object sender, WebViewNewWindowEventArgs e)
 {
     Application.Instance.AsyncInvoke(() => Application.Instance.Open(e.Uri.AbsoluteUri));
     e.Cancel = true;
 }