클라이언트는 WebViewClient
类的shouldOverrideUrlLoading
메서드를 사용하여 프런트엔드와 클라이언트 간의 통신을 처리합니다. 이 경우 프런트 엔드는 클라이언트의 처리 콜백을 어떻게 알 수 있습니까?
상황은 다음과 같습니다.
프런트 엔드는 현재 사용자 가져오기와 같은 특정 프로토콜의 주소를 보냅니다jsbridge://bridge/userid
클라이언트는 이 로드를 캡처하고 프런트 엔드에 값을 쓰는 등의 작업을 수행하기 시작합니다javaScript:window.userId=12121
이 시나리오에서는 어떻게 해야 하나요?
天蓬老师2017-05-16 13:29:34
JSBridge를 이해하려면 궁극적으로 세 가지를 이해해야 합니다. 하나는 H5가 Native를 호출하는 방식, 다른 하나는 Native가 H5를 호출하는 방식, 마지막은 둘 사이의 콜백입니다.
H5에서 Native를 호출하는 방법은 인터넷에 있는 메소드가 모두 동일합니다. 즉, WebView가 H5 페이지를 로드하면 WebChromeClient
또는 WebviewClient에서 해당 메소드를 호출합니다. code> 중 하나를 선택하면 H5 데이터를 가로채서 처리를 위해 Native에 넘겨줍니다
WebChromeClient
或者是WebviewClient
中的方法,选取其中的一个,来截取H5的数据,交由Native处理
Native如何调用H5,归根结底就是一条,webview.loadUrl(javascript:yourFunc(data););
会把数据传给H5并执行H5中的yourFunc
这个方法
两者之间的回调,即Native或者H5处理好对方的调用后,把结果返回给对方,供对方使用。本质就是把调用函数Callback使用时间戳或者其他的唯一标识通过Map组织起来,即Map(UniqueID,Callback)
,并把此唯一标示UniqueID
传给对方函数,对方执行完毕后,会把这个唯一标示UniqueID
和返回数据data
传回来,然后通过这个UniqueID
找到调用函数CallBack
,然后执行CallBack(data)
从你的描述中可以知道,你现在是迷失在第二点上了,你需要在H5中写一个JS方法:
function getUseID(userid){
console.log(userid);
}
Native中拿到数据后,执行:
webview.loadUrl(javascript:getUseID(userid););
H5中的getUseID
webview.loadUrl(javascript:yourFunc(data););
가 H5에 데이터를 전달하고 yourFunc를 실행하는 방법 중 하나일 뿐입니다. H5의
이 방법
둘 사이의 콜백은 Native 또는 H5가 상대방의 호출을 처리한 후 상대방이 사용할 수 있도록 결과를 상대방에게 반환하는 것을 의미합니다. 핵심은 타임스탬프나 기타 고유 식별자, 즉 Map(UniqueID, Callback)
을 사용하여 Map을 통해 호출 함수 콜백을 구성하고 이 고유 식별자 UniqueID
를 상대방 기능이 실행된 후 상대방은 고유 식별자 UniqueID
와 반환 데이터 data
를 다시 전달한 후 이 UniqueID
를 사용합니다. 호출 함수 CallBack
을 찾은 다음 CallBack(data)
설명을 보면 두 번째 지점에서 길을 잃었다는 것을 알 수 있습니다. H5에서 JS 메서드를 작성해야 합니다.
으아아아webview.loadUrl(javascript:getUseID(userid););
getUseID
메소드가 호출되어 실행되면 Native로부터 데이터가 성공적으로 수신됩니다완전한 JSBridge라면 위의 세 번째 사항을 고려해야 합니다.