웹사이트 검색

javascript - JavaScriptCore와 JSContext를 사용하여 UIWebView에서 모든 iOS 네이티브 함수를 호출할 수 없음


제 질문을 설명하게 해주세요. 오랫동안 저를 괴롭히고 있습니다. 어떤 도움이라도 감사하겠습니다. 제발 도와주세요.

저는 iOS에서 하이브리드 형식의 앱을 개발하고 있습니다. 웹페이지를 로드하기 위해 UIWebView를 사용하고 있습니다. 웹페이지는 http://myserver.com 에서 호스팅하고 있습니다 (예시이며 실제 URL은 아닙니다). 이 서버에는 여러 개의 웹페이지를 호스팅했습니다.

저는 "JSContext"를 사용하여 UIWebView에서 내 서버에서 로드된 javascript(웹페이지)와 네이티브 iOS 기능 간에 통신하고 있습니다.

저는 UIWebView JavaScript가 iOS JSContext 네임스페이스(객체)를 잃어버리는 문제에 대해 제시된 절차를 따랐습니다. 컨텍스트가 사라지고 있었지만, 이 질문의 해결책에서 제공된 우회 방법을 추가했습니다. 그럼에도 불구하고 UIWebView 안에서 일부 프레임이 로드될 때 제 iOS 컨텍스트가 사라지고 있습니다. 다음 단계를 따르면 컨텍스트가 사라집니다.

  1. 나는 page1을 내 서버에서 UIWebView로 로드합니다. 거의 모든 기능이 잘 작동하며, OS 네이티브 iOS의 모든 기능이 javascript에서 호출됩니다.
  2. 이제 page1에서 상호작용의 결과로 두 번째 page2가 로드되면, 같은 UIWebView javascript 컨텍스트가 사라집니다.

한 가지 더 마법 같은 것이 있습니다. 만약 제가 간접 로딩(page1->page2)이 아닌 UIWebView에서 page2를 직접 로드하면, 모든 것이 잘 작동하고 모든 네이티브 메서드가 UIWebView에서 예상대로 호출됩니다. 도와주세요. 더 많은 정보가 필요하면 질문해주세요.

답변 #1

무엇보다도, UIWebView의 JavaScriptContext를 이런 식으로 훔쳐 사용하면 앱 거부로 이어질 가능성이 높습니다.

하지만 이게 그냥 과학 프로젝트라면...

자바스크립트 컨텍스트를 얻기 위한 다른 기법을 시도해 볼 수 있습니다. 저는 이 GitHub 프로젝트에서 한 가지 해결책을 제시합니다:

https://github.com/TomSwift/UIWebView-TS_JavaScriptContext

기본적으로 저는 WebKit이 작동하는 방식에 대한 일부 지식을 사용하여 NSObject에 카테고리를 구현하고, 프레임에 대해 새로운 JavaScriptContext가 생성될 때 호출되는 처리되지 않은 일부 WebKit 델리게이트 메서드를 가로채고 있습니다.