প্রকল্প সম্পর্কে
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 লাইসেন্স।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.