コード例 #1
0
ファイル: WebView2Handler.cs プロジェクト: nzysoft/Eto
        private void Control_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)
        {
            var args = new WebViewLoadingEventArgs(new Uri(e.Uri), true);

            Callback.OnDocumentLoading(Widget, args);
            e.Cancel = args.Cancel;
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void E_DocumentLoading(object sender, WebViewLoadingEventArgs e)
        {
            Rhino.RhinoApp.WriteLine(e.Uri.ToString());
            Rhino.RhinoApp.WriteLine(index);

            if (e.Uri.AbsolutePath != index && IndexLoaded)
            {
                e.Cancel = true;

                var result             = "";
                var deserializedObject = new TestObject();

                if (e.Uri.ToString().Contains("sayhi"))
                {
                    result             = Wv.ExecuteScript("SayHi(\"Luis\"); return payload;");
                    deserializedObject = JsonConvert.DeserializeObject <TestObject>(result);
                }

                if (e.Uri.ToString().Contains("returndata"))
                {
                    result             = Wv.ExecuteScript("ReturnData(1000); return payload;");
                    deserializedObject = JsonConvert.DeserializeObject <TestObject>(result);
                }

                Rhino.RhinoApp.WriteLine(deserializedObject.ReturnValue);

                foreach (var num in deserializedObject.Numbers)
                {
                    Rhino.RhinoApp.Write("{0}{1}", num, ",");
                }

                Rhino.RhinoApp.WriteLine();
            }
        }
コード例 #3
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.DocumentLoadedEvent:
                Control.LoadCompleted += delegate(object sender, swn.NavigationEventArgs e)
                {
                    var args = new WebViewLoadedEventArgs(e.Uri);
                    Widget.OnDocumentLoaded(args);
                    Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(this.DocumentTitle));
                    HookDocumentEvents();
                };
                break;

            case WebView.DocumentLoadingEvent:
                Control.Navigating += delegate(object sender, swn.NavigatingCancelEventArgs e)
                {
                    var args = new WebViewLoadingEventArgs(e.Uri, true);
                    Widget.OnDocumentLoading(args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.OpenNewWindowEvent:
            case WebView.DocumentTitleChangedEvent:
                HookDocumentEvents(handler);
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
コード例 #4
0
ファイル: WebViewHandler.cs プロジェクト: daddycoding/Eto
            public void HandleNavigationPolicyDecisitionRequested(object o, WebKit.NavigationPolicyDecisionRequestedArgs args)
            {
                var handler = Handler;

                if (args.Request.Uri.StartsWith(EtoReturnPrefix, StringComparison.Ordinal))
                {
                    // pass back the response to ExecuteScript()
                    handler.scriptReturnValue = Uri.UnescapeDataString(args.Request.Uri.Substring(EtoReturnPrefix.Length).Replace('+', ' '));
                    handler.returnResetEvent.Set();
                    args.PolicyDecision.Ignore();
                }
                else
                {
                    var e = new WebViewLoadingEventArgs(new Uri(args.Request.Uri), false);
                    handler.Callback.OnDocumentLoading(handler.Widget, e);
                    if (e.Cancel)
                    {
                        args.PolicyDecision.Ignore();
                    }
                    else
                    {
                        args.PolicyDecision.Use();
                    }
                }
            }
コード例 #5
0
        private void Browser_DocumentLoading(object sender, WebViewLoadingEventArgs e)
        {
            Rhino.RhinoApp.WriteLine("Browser: Document Loading");
            Rhino.RhinoApp.WriteLine(e.Uri.ToString());

            e.Cancel = true;
        }
コード例 #6
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
            case WebView.NavigatedEvent:
                Control.Navigated += (s, e) => Callback.OnNavigated(Widget, new WebViewLoadedEventArgs(e.Url));
                break;

            case WebView.DocumentLoadedEvent:
                Control.DocumentCompleted += (sender, e) => Callback.OnDocumentLoaded(Widget, new WebViewLoadedEventArgs(e.Url));
                break;

            case WebView.DocumentLoadingEvent:
                Control.Navigating += (sender, e) =>
                {
                    var args = new WebViewLoadingEventArgs(e.Url, false);
                    Callback.OnDocumentLoading(Widget, args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.OpenNewWindowEvent:
                HookDocumentEvents(handler);
                break;

            case WebView.DocumentTitleChangedEvent:
                Control.DocumentTitleChanged += (sender, e) => Callback.OnDocumentTitleChanged(Widget, new WebViewTitleEventArgs(Control.DocumentTitle));
                break;

            default:
                base.AttachEvent(handler);
                break;
            }
        }
コード例 #7
0
        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;
            }
        }
コード例 #8
0
ファイル: WebViewHandler.cs プロジェクト: modulexcite/Eto-1
        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
        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;
            }
        }
コード例 #10
0
        bool CefSharp.IRequestHandler.OnBeforeBrowse(CefSharp.IWebBrowser browser, CefSharp.IRequest request, CefSharp.NavigationType navigationType, bool isRedirect)
        {
            var uri = new Uri(request.Url);

            if (uri.Scheme != "chrome-devtools")
            {
                // hack since we can't tell if we're loading from an iframe or a new page. grr.
                if (uri.IsFile || navigationType != CefSharp.NavigationType.Other)
                {
                    var args = new WebViewLoadingEventArgs(uri, true);
                    Widget.OnDocumentLoading(args);
                    return(args.Cancel);
                }
            }
            return(false);
        }
コード例 #11
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;
            }
        }
コード例 #12
0
        static void HandleDecidePolicyForNavigation(object sender, wk.WebNavigationPolicyEventArgs e)
        {
            var handler = GetHandler(e.Frame.WebView) as WebViewHandler;

            if (handler != null)
            {
                var args = new WebViewLoadingEventArgs(new Uri(e.Request.Url.AbsoluteString), e.Frame == handler.Control.MainFrame);
                handler.Widget.OnDocumentLoading(args);
                if (args.Cancel)
                {
                    e.DecisionToken.PerformSelector(selIgnore, null, 0);
                }
                else
                {
                    e.DecisionToken.PerformSelector(selUse, null, 0);
                }
            }
        }
コード例 #13
0
            public void HandleNavigationRequested(object o, WebKit.NavigationRequestedArgs args)
            {
                var handler = Handler;

                if (args.Request.Uri.StartsWith(EtoReturnPrefix, StringComparison.Ordinal))
                {
                    // pass back the response to ExecuteScript()
                    var tcs = handler.jscs?.Count > 0 ? handler.jscs?.Dequeue() : null;
                    tcs?.SetResult(Uri.UnescapeDataString(args.Request.Uri.Substring(EtoReturnPrefix.Length).Replace('+', ' ')));
                    args.RetVal = WebKit.NavigationResponse.Ignore;
                }
                else
                {
                    var e = new WebViewLoadingEventArgs(new Uri(args.Request.Uri), false);
                    handler.Callback.OnDocumentLoading(handler.Widget, e);
                    args.RetVal = e.Cancel ? WebKit.NavigationResponse.Ignore : WebKit.NavigationResponse.Accept;
                }
            }
コード例 #14
0
ファイル: WebViewHandler.cs プロジェクト: sami1971/Eto
            public void HandleNavigationRequested(object o, WebKit.NavigationRequestedArgs args)
            {
                var handler = Handler;

                if (args.Request.Uri.StartsWith(EtoReturnPrefix, StringComparison.Ordinal))
                {
                    // pass back the response to ExecuteScript()
                    handler.scriptReturnValue = HttpUtility.UrlDecode(args.Request.Uri.Substring(EtoReturnPrefix.Length));
                    handler.returnResetEvent.Set();
                    args.RetVal = WebKit.NavigationResponse.Ignore;
                }
                else
                {
                    var e = new WebViewLoadingEventArgs(new Uri(args.Request.Uri), false);
                    handler.Widget.OnDocumentLoading(e);
                    args.RetVal = e.Cancel ? WebKit.NavigationResponse.Ignore : WebKit.NavigationResponse.Accept;
                }
            }
コード例 #15
0
        public override void AttachEvent(string handler)
        {
            switch (handler)
            {
#if TODO_XAML
            case WebView.NavigatedEvent:
                this.Control.Navigated += (sender, e) =>
                {
                    Widget.OnNavigated(new WebViewLoadedEventArgs(e.Url));
                };
                break;

            case WebView.DocumentLoadedEvent:
                this.Control.DocumentCompleted += (sender, e) =>
                {
                    Widget.OnDocumentLoaded(new WebViewLoadedEventArgs(e.Url));
                };
                break;

            case WebView.DocumentLoadingEvent:
                this.Control.Navigating += (sender, e) =>
                {
                    var args = new WebViewLoadingEventArgs(e.Url, false);
                    Widget.OnDocumentLoading(args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.OpenNewWindowEvent:
                HookDocumentEvents(handler);
                break;

            case WebView.DocumentTitleChangedEvent:
                this.Control.DocumentTitleChanged += delegate
                {
                    Widget.OnDocumentTitleChanged(new WebViewTitleEventArgs(Control.DocumentTitle));
                };
                break;
#endif
            default:
                base.AttachEvent(handler);
                break;
            }
        }
コード例 #16
0
ファイル: WpfWebViewHandler.cs プロジェクト: philstopford/Eto
        public override void AttachEvent(string id)
        {
            switch (id)
            {
            case WebView.NavigatedEvent:
                Control.Navigated += (sender, e) =>
                {
                    var args = new WebViewLoadedEventArgs(e.Uri);
                    Callback.OnNavigated(Widget, args);
                };
                break;

            case WebView.DocumentLoadedEvent:
                Control.LoadCompleted += (sender, e) =>
                {
                    var args = new WebViewLoadedEventArgs(e.Uri);
                    Callback.OnDocumentLoaded(Widget, args);
                    Callback.OnDocumentTitleChanged(Widget, new WebViewTitleEventArgs(DocumentTitle));
                    HookDocumentEvents();
                };
                break;

            case WebView.DocumentLoadingEvent:
                Control.Navigating += (sender, e) =>
                {
                    var args = new WebViewLoadingEventArgs(e.Uri, true);
                    Callback.OnDocumentLoading(Widget, args);
                    e.Cancel = args.Cancel;
                };
                break;

            case WebView.OpenNewWindowEvent:
            case WebView.DocumentTitleChangedEvent:
                HookDocumentEvents(id);
                HandleEvent(WebView.NavigatedEvent);
                break;

            default:
                base.AttachEvent(id);
                break;
            }
        }
コード例 #17
0
        protected override void HandleAction(WebViewLoadingEventArgs e)
        {
            var historyIndex = e.Uri.LocalPath.IndexOf(LOAD_HISTORY_PREFIX, StringComparison.Ordinal);

            if (historyIndex >= 0)
            {
                LoadHistory();
                return;
            }

            var joinRoomIndex = e.Uri.LocalPath.IndexOf(JOIN_ROOM_PREFIX, StringComparison.Ordinal);

            if (joinRoomIndex >= 0)
            {
                Channel.Server.JoinChannel(e.Uri.PathAndQuery.Substring(joinRoomIndex + JOIN_ROOM_PREFIX.Length));
                return;
            }

            base.HandleAction(e);
        }
コード例 #18
0
 void HandleDocumentLoading(object sender, WebViewLoadingEventArgs e)
 {
     if (e.IsMainFrame)
     {
         Debug.Print("Loading {0}", e.Uri);
         if (e.Uri.IsFile || e.Uri.IsLoopback)
         {
             Application.Instance.AsyncInvoke(delegate
             {
                 HandleAction(e);
             });
             e.Cancel = true;
         }
         else
         {
             Application.Instance.AsyncInvoke(delegate
             {
                 Application.Instance.Open(e.Uri.AbsoluteUri);
             });
             e.Cancel = true;
         }
     }
 }
コード例 #19
0
 protected virtual void HandleAction(WebViewLoadingEventArgs e)
 {
     FinishLoad();
 }
コード例 #20
0
ファイル: WebViewHandler.cs プロジェクト: modulexcite/Eto-1
        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;
            }
        }