[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4112":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":25,"discoverSource":26},4112,"JsBridge","happydog-intj\u002FJsBridge","happydog-intj","android java and javascript bridge, inspired by wechat webview jsbridge",null,"Java",9915,2007,252,143,0,2,40.91,false,"master",true,[],"2026-06-12 02:00:58","# JsBridge\n\n-----\n\nInspired and modified from [this](https:\u002F\u002Fgithub.com\u002Fjacin1\u002FJsBridge) and WeChat jsBridge file, with some bug fixes and feature enhancements.\n\nThis project makes a bridge between Java and JavaScript.\n\nIt provides a safe and convenient way to call Java code from JavaScript and call JavaScript code from Java.\n\n## How JsBridge Works\n![JsBridge](.\u002FJsBridgeWork.png)\n\n## Demo\n![JsBridge Demo](https:\u002F\u002Fraw.githubusercontent.com\u002Flzyzsd\u002FJsBridge\u002Fmaster\u002FJsBridge.gif)\n\n## Usage\n\n## JitPack.io\n\nI strongly recommend [JitPack.io](https:\u002F\u002Fjitpack.io)\n\n```groovy\nrepositories {\n    \u002F\u002F ...\n    maven { url \"https:\u002F\u002Fjitpack.io\" }\n}\n\ndependencies {\n    compile 'com.github.lzyzsd:jsbridge:1.0.4'\n}\n```\n\n## Use it in Java\n\nAdd `com.github.lzyzsd.jsbridge.BridgeWebView` to your layout, it is inherited from WebView.\n\n### Register a Java handler function so that JavaScript can call\n\n```java\n\n    webView.registerHandler(\"submitFromWeb\", new BridgeHandler() {\n        @Override\n        public void handler(String data, CallBackFunction function) {\n            Log.i(TAG, \"handler = submitFromWeb, data from web = \" + data);\n            function.onCallBack(\"submitFromWeb exe, response data from Java\");\n        }\n    });\n\n```\n\nJavaScript can call this Java handler method \"submitFromWeb\" through:\n\n```javascript\n\n    WebViewJavascriptBridge.callHandler(\n        'submitFromWeb'\n        , {'param': str1}\n        , function(responseData) {\n            document.getElementById(\"show\").innerHTML = \"send get responseData from java, data = \" + responseData\n        }\n    );\n\n```\n\nYou can set a default handler in Java, so that JavaScript can send messages to Java without an assigned handlerName\n\n```java\n\n    webView.setDefaultHandler(new DefaultHandler());\n\n```\n\n```javascript\n\n    window.WebViewJavascriptBridge.doSend(\n        data\n        , function(responseData) {\n            document.getElementById(\"show\").innerHTML = \"responseData from java, data = \" + responseData\n        }\n    );\n\n```\n\n### Register a JavaScript handler function so that Java can call\n\n```javascript\n\n    WebViewJavascriptBridge.registerHandler(\"functionInJs\", function(data, responseCallback) {\n        document.getElementById(\"show\").innerHTML = (\"data from Java: = \" + data);\n        var responseData = \"Javascript Says Right back aka!\";\n        responseCallback(responseData);\n    });\n\n```\n\nJava can call this JavaScript handler function \"functionInJs\" through:\n\n```java\n\n    webView.callHandler(\"functionInJs\", new Gson().toJson(user), new CallBackFunction() {\n        @Override\n        public void onCallBack(String data) {\n\n        }\n    });\n\n```\nYou can also define a default handler using the init method, so that Java can send messages to JavaScript without an assigned handlerName\n\nFor example:\n\n```javascript\n\n    window.WebViewJavascriptBridge.init(function(message, responseCallback) {\n        console.log('JS got a message', message);\n        var data = {\n            'Javascript Responds': 'Wee!'\n        };\n        console.log('JS responding with', data);\n        responseCallback(data);\n    });\n\n```\n\n```java\n    webView.send(\"hello\");\n```\n\nwill print 'JS got a message hello' and 'JS responding with' in webview console.\n\n### Persistent Callbacks (New Feature)\n\nBy default, callbacks are deleted after first use. However, you can now use persistent callbacks that can be reused multiple times:\n\n#### Java Side\n\n```java\n\u002F\u002F Use persistent callback that won't be deleted after first use\nwebView.callHandlerPersistent(\"functionInJs\", data, new OnBridgeCallback() {\n    @Override\n    public void onCallBack(String data) {\n        \u002F\u002F This callback can be called multiple times\n        Log.d(TAG, \"Persistent callback called: \" + data);\n    }\n});\n```\n\n#### JavaScript Side\n\n```javascript\n\u002F\u002F Use persistent callback\nWebViewJavascriptBridge.callHandlerPersistent(\"javaHandler\", data, function(response) {\n    \u002F\u002F This callback can be reused multiple times\n    console.log(\"Persistent callback response: \" + response);\n});\n\n\u002F\u002F Register and manually manage persistent callbacks\nvar callbackId = \"my_persistent_callback\";\nWebViewJavascriptBridge.registerPersistentCallback(callbackId, function(data) {\n    console.log(\"Persistent callback called: \" + data);\n});\n\n\u002F\u002F Remove persistent callback when no longer needed\nWebViewJavascriptBridge.removePersistentCallback(callbackId);\n```\n\nThis feature is useful when you need to maintain a long-term communication channel between Java and JavaScript, such as for real-time updates or event notifications.\n\n### Switch to CustomWebView\n* activity_main.xml\n```xml\n    \u003Ccom.github.lzyzsd.jsbridge.example.CustomWebView\n        android:id=\"@+id\u002FwebView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" >\n     \u003C\u002Fcom.github.lzyzsd.jsbridge.example.CustomWebView>\n```\n* MainActivity.java\nChange BridgeWebView class to CustomWebView:\n```java\n    CustomWebView webView = (CustomWebView) findViewById(R.id.webView);\n    \n```\n\n## Notice\n\nThis library will inject a WebViewJavascriptBridge Object to the window object.\nYou can listen to the `WebViewJavascriptBridgeReady` event to ensure `window.WebViewJavascriptBridge` exists, as the below code shows:\n\n```javascript\n\n    if (window.WebViewJavascriptBridge) {\n        \u002F\u002Fdo your work here\n    } else {\n        document.addEventListener(\n            'WebViewJavascriptBridgeReady'\n            , function() {\n                \u002F\u002Fdo your work here\n            },\n            false\n        );\n    }\n\n```\n\nOr put all JsBridge function call into `window.WVJBCallbacks` array if `window.WebViewJavascriptBridge` is undefined, this task queue will be flushed when `WebViewJavascriptBridgeReady` event triggered.\n\nCopy and paste setupWebViewJavascriptBridge into your JS:\n\n```javascript\nfunction setupWebViewJavascriptBridge(callback) {\n\tif (window.WebViewJavascriptBridge) {\n        return callback(WebViewJavascriptBridge);\n    }\n\tif (window.WVJBCallbacks) {\n        return window.WVJBCallbacks.push(callback);\n    }\n\twindow.WVJBCallbacks = [callback];\n}\n```\n\nCall `setupWebViewJavascriptBridge` and then use the bridge to register handlers or call Java handlers:\n\n```javascript\nsetupWebViewJavascriptBridge(function(bridge) {\n\tbridge.registerHandler('JS Echo', function(data, responseCallback) {\n\t\tconsole.log(\"JS Echo called with:\", data);\n\t\tresponseCallback(data);\n    });\n\tbridge.callHandler('ObjC Echo', {'key':'value'}, function(responseData) {\n\t\tconsole.log(\"JS received response:\", responseData);\n\t});\n});\n```\n\nIt's the same as [WebViewJavascriptBridge](https:\u002F\u002Fgithub.com\u002Fmarcuswestin\u002FWebViewJavascriptBridge), which makes it easier for you to define the same behavior across different platforms between Android and iOS, while writing concise code.\n\n## License\n\nThis project is licensed under the terms of the MIT license.\n","JsBridge 是一个用于 Android 平台的 Java 与 JavaScript 之间的桥梁库，灵感来源于微信 WebView 的 JsBridge。它提供了一种安全且便捷的方式，使得在 JavaScript 中可以调用 Java 代码，在 Java 中也可以调用 JavaScript 代码。项目通过注册处理器的方式来实现跨语言通信，支持为特定功能或默认情况设置处理函数，从而灵活地满足不同的交互需求。适用于需要在原生应用中嵌入网页并与之进行复杂数据交换的应用场景，如混合开发模式下的移动应用。","2026-06-11 02:58:28","top_language"]