는 안드로이드의 WebView
여기에 유용합니다 addJavascriptInterface(Object obj, String interfaceName)
라는 메서드가 포함되어 있습니다. 이 방법을 사용
은
, 당신은 인터페이스로 추가 객체 obj
은 웹보기에서 자바 스크립트 코드를 통해 액세스 할 수 있습니다. 귀하의 경우에는 일부 JavaScript 객체를 Java로 다시 전송하는 setter 메서드가있는 객체를 전달할 수 있습니다.
당신은 여전히 JSON 객체로 자바 스크립트 객체를 변환하는 글루 코드를 작성해야합니다. 빠른 접근을 위해 자바 스크립트에서 전달 된 JSON 문자열을 사용하여 인터페이스가 자바 측에서 JSONObject를 생성하도록 할 수 있습니다. Java의 JSONObject
클래스에는 JSON 데이터가 포함 된 String을 허용하는 생성자가 있습니다. 따라서 문자열 화 된 결과를 Java로 직접 전달하고 그 방법으로 객체를 생성 할 수 있습니다. 예를 들어 :
class JSInterface {
HashMap<String, JSONObject> mObjectsFromJS = new HashMap<String, JSONObject>();
public void passObject(String name, String json) {
mObjectsFromJS.put(name, new JSONObject(json));
}
}
//At some point, register using:
mJSInterface = new JSInterface();
mWebView.addJavascriptInterface(mJSInterface, "Android");
그런 변수 jsonData에서 구문 분석되지 않은 JSON의 덩어리가 핸들러에서 자바 스크립트 측에 : 지금
Android.passObject("pageItems", jsonData);
을, 자바 측에서 당신의 JSInterface는있을 것이다 JSONObject에서 제공하는 getter를 사용하여 액세스 할 수있는 항목을 포함하는 JSONObject입니다. Javascript 호출을 통해 생성 된 객체는 mObjectsFromJS
맵에 있습니다. 물론 JSInterface 클래스에 추가 도우미 메서드를 추가하여 개체를보다 효율적으로 관리 할 수 있습니다.
내가 컴파일 또는 이러한 방법을 테스트, 그래서 당신은 그들에게 적절한 작동을 위해 조금 조정할해야 할 수도 없다. 그러나 바라건대 이것은 당신에게 아이디어를줍니다.
그러나 객체에 일관된 인터페이스와 데이터 항목이있는 경우 setter 메소드를 사용하여 JavaScript 객체 속성을 Java 객체 객체 필드에 바인딩하는 간단한 JavaScript 접착 함수를 만드는 것이 더 현명합니다.
참고 사항 이 코드는 원격 코드가 장치의 원시 코드를 트리거 할 수있게합니다. WebView
에로드되는 페이지/스크립트를 완전히 제어 할 수없는 경우 obj
에 의해 노출 된 동작이 악용을 허용하지 않아야합니다. 유사한 스레드에서
확인 응답 http://stackoverflow.com/questions/2250917/passing-a-javascript-object-using-addjavascriptinterface-on-android/32698399#32698399 –