2017-02-08 4 views
4

XcodeとSwiftでiOSアプリケーションを作成しました。Xcode、Swift; UIWebViewのハイパーリンクのクリックを検出する

Safariブラウザで特定のハイパーリンクを開きたい場合は、WebView自体に他のハイパーリンクを開きます。

これに到達するには、ハイパーリンクがクリックされたときを確認する必要があります。

これは、これまで私が持っているコードです:viewDidLoad()

// 
// PushViewController.swift 
// App 
// 
// 

import UIKit 
class PushViewController: UIViewController, UIWebViewDelegate { 
    @IBOutlet var openpushmessage: UIWebView! 

    var weburl:String = "http://www.example.com" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let url: NSURL = NSURL(string: weburl)! 
     let requestURL: NSURLRequest = NSURLRequest(URL: url) 
     openpushmessage.loadRequest(requestURL) 
    } 
    override func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
     if navigationType == .linkClicked 
     { 
      print("You clicked a hypelink!") 
     } 
     return true 
    } 
} 

コードが負荷に私のサーバーからメインのURL(http://www.example.com)を開きます。それはうまく動作します。

override fun webView[…]は、ハイパーリンクがクリックされたかどうかを検出してから、print("You clicked a hypelink!")を検出する必要があります。

しかし残念ながら、私は次のエラーを取得しています:

one error and one warning for my code

私が間違って何をしているのですか?これらのエラーを取り除くには?

+0

プロジェクトをクリーニングしましたか?また、overrideキーワードを削除してください。 – Priyal

+0

@Priyalさて、私は 'オーバーライド'を削除し、私はプロジェクトをきれいにしましたが、それでも同じです。私は今、さらに: '宣言されていない型の使用 'URLRequest'' – user7128548

+0

私はあなたの正確なコードをコピーしました。 navigationType ==は { 印刷( "あなたはhypelinkをクリックし.linkClicked場合>ブール{ - ' FUNCのWebViewの(UIWebViewNavigationType _のWebView::のUIWebView、shouldStartLoadWith要求:URLRequestの、navigationType)最終的なコードがある後提案を解決! ") } return true }'エラーと警告は表示されません。 私は** swift3 **を使用していますので、警告を解決する必要がありました。 – Priyal

答えて

4

これは、作業溶液(Xcodeの7.3.1とスウィフト2.2)である:danhhgl from freelancer.com

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    if request.URL?.query?.rangeOfString("target=external") != nil { 
     if let url = request.URL { 
      UIApplication.sharedApplication().openURL(url) 
      return false 
     } 
    } 
    return true 
} 

多くの感謝!

0

私はあなたがこのコードで解決することができると思います:

IOSコードで
function reportBackToObjectiveC(string) 
{ 
var iframe = document.createElement("iframe"); 
iframe.setAttribute("src", "callback://" + string); 
document.documentElement.appendChild(iframe); 
iframe.parentNode.removeChild(iframe); 
iframe = null; 
} 

var links = document.getElementsByTagName("a"); 
for (var i=0; i<links.length; i++) { 
links[i].addEventListener("click", function() { 
    reportBackToObjectiveC("link-clicked"); 
}, true); 
} 

:あなたはhereからチェックすることができ

if ([[[request URL] scheme] isEqualToString:@"callback"]) { 
[self setNavigationLeavingCurrentPage:YES]; 
return NO; 
} 

詳細:

6

のため

を試してみてくださいスウィフト3.0

public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 
     { 
     if navigationType == .linkClicked 
     { 

      } 
      return true; 
     } 

迅速2.2

internal func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool 
    { 
     if navigationType == .LinkClicked 
     { 

     } 
     return true; 
    } 
+0

パラメータに 'Extraneous' _ 'があります:' webView 'にはキーワード引数名​​がありません。また、' Binary operator '=='は 'UIWebViewNavigationType'と '_'タイプのオペランドには適用できません。 – user7128548

+0

Xcode 7.3.1とSwift 2.2を使用している可能性がありますか? – user7128548

+0

貼り付けたコードは速いです。3.0 –

関連する問題