Files
2026-07-13 12:20:06 +08:00

1023 B

Android JS Bridge Patterns

Inject Native Bridge

private fun injectJavaScriptFunction() {
    val js = """
        javascript: window.addEventListener('zoomCampaignSdk:ready', () => {
            if (window.zoomCampaignSdk) {
                window.zoomCampaignSdk.native = {
                    exitHandler: { handle: function() { AndroidExit.handleExit(); } },
                    commonHandler: { handle: function(e) { AndroidCommon.handleCommon(JSON.stringify(e)); } }
                };
            }
        });
    """.trimIndent()
    webView.loadUrl(js)
}

Handoff Relay

private fun injectHandoffFunction() {
    val js = """
        javascript: window.addEventListener('support_handoff', (e) => {
            AndroidHandoff.handleHandoff(JSON.stringify(e.detail));
        });
    """.trimIndent()
    webView.loadUrl(js)
}

URL Governance

  • Use shouldOverrideUrlLoading for in-app vs system-browser policy.
  • Use multi-window callbacks for target="_blank" handling.