【问题标题】:How to load a url link that is inside a web view and keep it in that web view in SWIFT如何加载 Web 视图中的 url 链接并将其保留在 SWIFT 中的该 Web 视图中
【发布时间】:2016-10-20 03:26:44
【问题描述】:

我有一个网页视图,其底部有一个带有链接的网页。我有办法处理它们被点击,但它所做的只是将它们打开到一个新的 safari 浏览器中。这不是我想要的。我希望他们留在 Web 视图中并允许我像那样轻松地导航它们。有没有办法做到这一点?

我试过只使用普通的网页视图,但底部的链接不起作用。

这是我目前所拥有的:

class ViewController: UIViewController, UIWebViewDelegate {


@IBOutlet weak var myWebview: UIWebView!
@IBOutlet weak var returnButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    prettyReturnButton(returnButton)

    let url = NSURL(string: "mywebpage")

    myWebview.delegate = self

    print("Web page:" , url)
    let requestObj = NSURLRequest(URL: url!);
    myWebview.loadRequest(requestObj);
    myWebview.keyboardDisplayRequiresUserAction = true



}

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    switch navigationType {
    case .LinkClicked:
        // Open links in Safari
        //let newRequestObj = NSURLRequest(URL: request.URL!)
       // webView.loadRequest(newRequestObj)
        UIApplication.sharedApplication().openURL(request.URL!)
        return false
    default:
        // Handle other navigation types...
        return true
    }
}

【问题讨论】:

  • 如果你不使用委托,它应该导航到同一个 webview 中的链接
  • 如果你不想在 Safari 中打开链接,那为什么还要截取链接并在 Safari 中打开呢?

标签: ios swift uiwebview uiwebviewdelegate


【解决方案1】:

给你的 UIViewcontroller 代理:UIWebViewDelegate

 let url = NSURL(string: "http://www.djmazacool.com")
 let req = NSURLRequest(URL: url!)
 YOURWEBVIEW.delegate = self
 YOURWEBVIEW.loadRequest(req)



func webViewDidStartLoad(webView: UIWebView)
{
        // start animation
        print("start loaded call")
}
func webViewDidFinishLoad(webView: UIWebView)
{
        // load url complete
        print("loading done call")
}

输出:

不要忘记在 .plist 文件中添加此属性。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

【讨论】:

    【解决方案2】:

    在 webview 委托中,您将要使用相同的 webview 导航到新的 url。

    对您而言,这意味着您应该在您的开关盒内使用 loadRequest

    loadRequest documentation

    要解决您的问题,您应该使用 UIApplication.sharedApplication().openURL(request.URL!) 删除该行

    并将其替换为对loadRequest的调用

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        switch navigationType {
    
        case .LinkClicked:
            // Open links in Safari
    
            guard let newRequest = request as? URLRequest else { return false }
    
            webView.loadRequest(newRequest)
            return false
        default:
            // Handle other navigation types...
            return true
       }
    }
    

    希望这会有所帮助!祝你有美好的一天!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多