【问题标题】:Xamarin iOS C# Open Links in Safari from UIWebViewXamarin iOS C# 从 UIWebView 在 Safari 中打开链接
【发布时间】:2014-03-18 01:36:49
【问题描述】:

我正在使用 C# 在 Xamarin 中使用 UIWebView 编写 iPhone 应用程序。

默认情况下,Web 视图中的嵌入链接会在同一 Web 视图中打开网页。我希望他们在新的 Safari 浏览器实例中启动链接页面。

X-Code 中的目标 C 已经回答了这个问题,但据我所知,Xamarin C# 没有这个问题

webView.LoadHtmlString(html, new NSUrl(Const.ContentDirectory, true));

提前致谢

亚当

【问题讨论】:

    标签: c# iphone uiwebview xamarin.ios xamarin


    【解决方案1】:

    您可以使用此命令在设备 (Safari) 的浏览器中打开网页。

    UIApplication.SharedApplication.OpenUrl(new NSUrl("www.google.com"));
    

    您根本不必使用UIWebView。如果您想在UIWebView 中打开一些网页,而在Safari 中打开一些网页,则需要实现ShouldStartLoad 委托。在这里你可以决定是在UIWebView还是Safari打开网页。

    private bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
    {
        // you need to implement this method depending on your criteria
        if (this.OpenInExternalBrowser(request))
        {
            // open in Safari
            UIApplication.SharedApplication.OpenUrl(request.Url);
            // return false so the UIWebView won't load the web page
            return false;
        }
    
        // this.OpenInExternalBrowser(request) returned false -> let the UIWebView load the request
        return true;
    }
    

    最后在ViewDidLoad的某个地方(或你初始化WebView的其他地方)添加以下代码。

    webView.ShouldStartLoad = HandleShouldStartLoad;
    

    【讨论】:

      【解决方案2】:

      如果将内容加载到 UIWebView 中并且您想使用 Safari 打开链接,那么按照上述方式进行操作会得到一个空白页面。您需要检查 NavigationType。

      private bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navType)
      {
        if (navType == UIWebViewNavigationType.LinkClicked)
        {
          UIApplication.SharedApplication.OpenUrl(request.Url);
          return false;
        }
          return true;
      }
      

      【讨论】:

        【解决方案3】:

        最简单/最简单的方法是将委托分配给UIWebView 的ShouldStartLoad 属性:

        webView.ShouldStartLoad = (w, urlRequest, navigationType) => {
        
            // Open the url in Safari here.
            // The urlRequest parameter is of type NSUrlRequest, you can get the URL from it.
            return false; //return true for urls you actually want your web view to load.
        
        };
        

        确保代理返回 false,对于您要在 Safari 中加载的链接,以便您的 UIWebView 不会加载链接。

        【讨论】:

        • 感谢您的快速回答,但是当我实现该委托时,Web 视图显示为空白,而在我能够加载 html 文本字符串之前:我正在实现如下:
        • code webView.ShouldStartLoad = (w, urlRequest, navigationType) => { UIApplication.SharedApplication.OpenUrl(urlRequest.Url); return false; };
        • 我已经编辑了我的答案,请看一下。为您希望 Web 视图加载的链接返回 true,为您不想加载的链接返回 false。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2016-04-16
        • 2015-12-02
        • 1970-01-01
        • 2023-03-21
        • 2011-12-01
        相关资源
        最近更新 更多