2016-12-19 7 views
3

WKWebView가 적합하지 않은 이유로 응용 프로그램에서 UIWebView를 사용하고 있습니다. 설명해 보니, Swift3 (2.2 버전)으로의 응용 프로그램 변환이 끝났으며 내 shouldStartLoadWith 함수는 JS 이벤트를 가져 오지 못합니다. 변환하기 전에 이전 빌드를 실행하면 완벽하게 작동합니다. 이 같은UIWebView가 Swift3에서 shouldStartLoadWith에서 JS 이벤트를 가져 오지 못했습니다.

내 코드 조회 : 아무 서버 쪽/HTML 페이지에서 변경되지 않습니다 :이

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

     let url:URL = request.url! 
     if (url.scheme == "something"){ 

      if (url.host != nil){ 
       var properString = url.absoluteString.removingPercentEncoding! 
       properString = properString.replacingOccurrences(of: "something://", with: "") 
       performJSFunction(message: properString) 
      } 

      return false; 
     } 

     return true 
    } 

참고.

+0

해결책을 찾았습니까? – Kevin

+0

네, 저의 대답을보세요 –

답변

2

많은 시도 끝에 UIWebView이 처음에 https:// 또는 http://과 함께 이벤트를 받게된다는 것을 알게되었습니다.

지금
appname://something 

이 같은 그것을 얻을해야합니다 :

그래서 당신은 다음과 같이 그것을 얻기 위해 사용하는 경우

https://appname//something 

(후 점은 'APPNAME'제거됩니다주의 자동으로 - 심지어 당신이 src attribute을 통해 그것을 보낼 것입니다.

나는 그것이 당신이되고 싶지 않다는 것을 알고 있지만, 정말 잘 작동합니다.

+0

그리고 정확히 어떻게 로컬 HTML 파일에서 https/http를 얻겠습니까? 도움이 될만한 아이디어가 있습니까? – Machado

+0

만약 내가 당신의 질문을 이해한다면 나는 이것처럼 만들었다. 내가 선택한 src 속성으로 시작한 URL을 얻었다면 (내 답변에 설명 된대로) 나는 프로세스와 계속 진행하지 못하게했다. 일반 URL –

0

동일한 작업을 수행하려고하지만 로컬html 파일을 사용하는 사람들은 https:// 또는 http://과 아무런 관련이 없습니다.

해결 방법은 <button><a> 태그로 변경했습니다.

<a onclick="interface.callFromJS()" href="inapp://capture" ontouchstart="">Your Button Message</a> 

그리고 당신이 이러한 이벤트를 잡을 수 있습니다 :

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

     if (request.url?.scheme == "inapp") 
     { 
      doYourAction()  
     } 

     return true 

    } 

은 사람을 도움이되기를 바랍니다.