इस प्रोजेक्ट के बारे में

JsBridge एक Android WebView और JavaScript के बीच दो-तरफा संचार के लिए एक ब्रिज लाइब्रेरी है, जो WeChat के WebView JsBridge कार्यान्वयन से प्रेरित है। यह सुरक्षित और विश्वसनीय संदेश तंत्र प्रदान करता है, जो Java से JavaScript और JavaScript से Java दोनों दिशाओं में कॉल का समर्थन करता है। ## मुख्य विशेषताएं - **दो-तरफा संचार**: Java और JavaScript के बीच दो-तरफा कॉल का समर्थन करता है, जिसमें कॉलबैक तंत्र शामिल है। - **कई संचार चैनल**: URL Scheme इंटरसेप्शन, @JavascriptInterface, evaluateJavascript() और loadUrl("javascript:") चार चैनलों का समर्थन करता है, जो विभिन्न Android संस्करणों के साथ संगत है। - **स्थायी कॉलबैक**: कई प्रतिक्रियाओं के लिए कॉलबैक का समर्थन करता है, जो रीयल-टाइम अपडेट, इवेंट स्ट्रीम आदि परिदृश्यों के लिए उपयुक्त है। - **डोमेन व्हाइटलिस्ट**: सीमित कर सकता है कि कौन से डोमेन मूल विधियों को कॉल कर सकते हैं, सुरक्षा बढ़ाता है। - **संदेश कतार**: JS इंजेक्शन पूरा होने से पहले भेजे गए संदेश स्वचालित रूप से कतार में जाते हैं, और इंजेक्शन पूरा होने के बाद एक साथ वितरित होते हैं, संदेश हानि से बचाते हैं। - **कस्टम WebView एकीकरण**: BridgeHelper के माध्यम से कस्टम WebView में आसानी से एकीकृत किया जा सकता है। ## स्थापना JitPack रिपॉजिटरी के माध्यम से निर्भरता जोड़ें: ```groovy repositories { maven { url "https://jitpack.io" } } dependencies { implementation 'com.github.happydog-intj:JsBridge:v2.1.0' } ``` ## त्वरित आरंभ ### BridgeWebView का उपयोग लेआउट में BridgeWebView जोड़ें और Activity में प्रारंभ करें: ```java BridgeWebView webView = findViewById(R.id.webView); webView.setGson(new Gson()); webView.addJavascriptInterface( new MainJavascriptInterface( webView.getCallbacks(), webView.getPersistentCallbacks(), webView), "WebViewJavascriptBridge"); webView.loadUrl("file:///android_asset/demo.html"); ``` ### Java से JavaScript कॉल करना JS ओर handler पंजीकृत करें, फिर Java से कॉल करें: ```javascript WebViewJavascriptBridge.registerHandler("functionInJs", function(data, responseCallback) { document.getElementById("show").innerHTML = "data from Java: = " + data; responseCallback("Javascript Says Right back aka!"); }); ``` ```java webView.callHandler("functionInJs", new Gson().toJson(user), new OnBridgeCallback() { @Override public void onCallBack(String data) { Log.d(TAG, "response from JS: " + data); } }); ``` ### JavaScript से Java कॉल करना @JavascriptInterface क्लास बनाएं, JS ओर से कॉल किया जा सकता है: ```java public class MainJavascriptInterface extends BridgeWebView.BaseJavascriptInterface { @JavascriptInterface public void submitFromWeb(String data, String callbackId) { Log.d("JSInterface", "data from web: " + data); mWebView.responseFromWeb("response from Java", callbackId); } } ``` ```javascript WebViewJavascriptBridge.callHandler( 'submitFromWeb', {'param': 'value'}, function(responseData) { document.getElementById("show").innerHTML = "response: " + responseData; } ); ``` ### स्थायी कॉलबैक डिफ़ॉल्ट कॉलबैक पहली कॉल के बाद स्वचालित रूप से हटा दिया जाता है। कई प्रतिक्रियाओं के लिए `callHandlerPersistent()` का उपयोग करें: ```java webView.callHandlerPersistent("functionInJs", data, new OnBridgeCallback() { @Override public void onCallBack(String data) { Log.d(TAG, "called again: " + data); } }); ``` ### डोमेन व्हाइटलिस्ट सीमित करें कि कौन से डोमेन मूल विधियों को कॉल कर सकते हैं: ```java webView.addAllowedHost("example.com"); webView.addAllowedHost("*.example.com"); ``` जब व्हाइटलिस्ट खाली होती है (डिफ़ॉल्ट), सभी डोमेन की अनुमति होती है। ## कस्टम WebView एकीकरण BridgeHelper के माध्यम से कस्टम WebView में एकीकृत किया जा सकता है: ```java public class CustomWebView extends WebView implements WebViewJavascriptBridge, IWebView { private BridgeHelper bridgeHelper; private void init() { getSettings().setJavaScriptEnabled(true); bridgeHelper = new BridgeHelper(this); setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { bridgeHelper.onPageStarted(); } @Override public void onPageFinished(WebView view, String url) { bridgeHelper.onPageFinished(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return bridgeHelper.shouldOverrideUrlLoading(url); } }); } } ``` ## संगतता - **Android 11+ (API 30+)**: अनुकूलित, फ़ाइल एक्सेस अनुमति डिफ़ॉल्ट रूप से बंद है, कैश नीति होस्ट ऐप द्वारा तय की जाती है। - **HarmonyOS**: समुदाय पोर्टेड संस्करण `@alvin917/jsbridge` प्रदान करता है। - **एम्बेडेड डिवाइस**: यदि WebView निर्माण क्रैश होता है, तो डिवाइस के WebView प्रदाता की जांच करें। ## लाइसेंस MIT लाइसेंस।