2016-10-27 4 views
3

이전 버전의 iOS에서는 UIWebView에로드 된 JavaScript/HTML에서 정보를 보낼 수있었습니다. 웹보기를 시도 할 문서에 iframe이를 만들거나 사용자 정의 URL에 document.location.href을 설정하여 응용 프로그램을로드 :UIWebView에서 iOS 응용 프로그램으로 데이터 보내기 Xcode 8/iOS 10

<html> 
<body><input id="clickMe" type="button" value="clickme" onclick="changeWindow();" /></body> 
<script type="text/javascript"> 
    function changeWindow() { 
     //create temp frame 
     iFrame = this.createIFrame('onStatusChange://eyJ1c2VyTmFtZSI6IkpBTCIsLCJwcm92aWRlciI6IkVtYWlsIn0='); 
     //remove the frame now 
     iFrame.parentNode.removeChild(iFrame); 
    } 

    function createIFrame(src) { 
     var rootElm = document.documentElement; 
     var newFrameElm = document.createElement('IFRAME'); 
     newFrameElm.setAttribute('src', src); 
     rootElm.appendChild(newFrameElm); 
     return newFrameElm; 
    } 
</script> 
</html> 

을 그리고 클라이언트에서, 난 그냥 UIWebViewDelegate 콜백 webView:shouldStartLoadWithRequest:navigationType: 수신 및 확인 것 request.URL.scheme이 내 사용자 정의 구성표 (이 경우 onStatusChange)와 같으면

이것은 인기있는 질문 (예 : How to invoke Objective C method from Javascript and send back data to Javascript in iOS?)과 같이 자바 스크립트와 iOS 앱간에 통신하는 인기있는 방법입니다.

iOS 9 및 10 기기에서 Xcode 7 (Objective-C 또는 Swift)으로 제작 된 모든 앱에서 작동합니다. 델리게이트 콜백을 트리거하지 않는 URL을로드하려고하는 것조차 웹 뷰가 아닌 것처럼 델리게이트 메소드가 호출되지 않는 문제가 발생합니다.

UIWebView 또는 Xcode 7-8 또는 iOS 9-10에서 WebKit이 변경되어 작동하지 않습니까? 정말로 당황스러운 것은 iOS 8을 타겟으로하는 Xcode 7의 Objective-C로 제작 한 프로덕션 앱이 iOS 10 장치에서 작동하지만 동일한 코드베이스의 Xcode 8로 빌드 된 디버그 빌드가 작동하지 않는다는 것입니다.

답변

2

이 좋아, 긴 이야기의 짧은 우리는 우리의 아이폰 OS 응용 프로그램에 다시 웹보기에서 Base64로 인코딩 된 데이터를 전송하는 특별한 URL 방식 onStatusChange://를 사용합니다. 하나 이상의 등호 문자로 끝나는 URL을로드하려고 시도 할 때 iOS 10의 초크에서 UIWebView이 발생하고 실제 URL 대신 about:blank이로드됩니다.

iOS 9에서 완벽하게 작동하기 때문에 iOS 10의 결함으로 가정하고 rdar://29035522을 열었습니다. 해당 문제의 전체 재현 가능한 예가 해당 레이더의 본문에서 사용 가능합니다.

내 데이터 문자열 끝에 패딩 문자 = 개를 제거 할 수 있는지 또는 데이터를 디코딩하기 전에 웹에서 제거하고 클라이언트에 추가해야하는지 결정하기 위해 Base-N encoding RFC을 읽었습니다.

구현이 끝난 솔루션은 Base64로 인코딩 된 데이터를 이스케이프 처리하고 클라이언트에서 이스케이프 처리하지 않는 것입니다. 가장 우아한 해결책은 아니지만 안전을위한 최선의 방법 일 것입니다.

+0

rdar로 인한 업데이트가 있습니까? iOS 10.2.1에서도 여전히 문제가 발생하는 것을 보았습니다. 또한 특수 문자가 없어도 발생합니다. – Aviel

+0

@Aviel 슬프게도보고 할 것이 없지만 내 레이더는 업데이트 또는 순위가없는 "열린"상태로 표시됩니다. 버그 보고서를 복제하고 새로운 레이더를 작성하여 한 명 이상의 사람에게이 문제가 있음을 Apple에 알릴 수 있습니다. – JAL

+0

@Aviel 다른 개발자가 보고서를 볼 수 있도록 버그 보고서를 복제하고 OpenRadar에 게시 했습니까? – JAL

관련 문제