40 |
41 |
42 |
45 |
46 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
64 |
65 |
66 |
67 |
68 |
140 |
141 |
--------------------------------------------------------------------------------
/js-bridge-demo/src/main/assets/my-sdk.js:
--------------------------------------------------------------------------------
1 | var sdk = {
2 | showPackageName: function (params) {
3 | var _invokeName = 'showPackageName';
4 | var _invokeParam = params;
5 | window.JavaBridge.invoke(_invokeName, _invokeParam, null);
6 | },
7 | getUser: function (params) {
8 | var _invokeName = 'getUser';
9 | var _invokeParam = params;
10 | var _clientCallback = params;
11 | window.JavaBridge.invoke(_invokeName, _invokeParam, _clientCallback);
12 | }
13 | };
--------------------------------------------------------------------------------
/js-bridge-demo/src/main/assets/page2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
35 |
36 |
37 |
40 |
41 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
59 |
60 |
61 |
62 |
63 |
138 |
139 |
--------------------------------------------------------------------------------
/js-bridge-demo/src/main/java/dev/xesam/android/web/jsbridge/demo/MainActivity.java:
--------------------------------------------------------------------------------
1 | package dev.xesam.android.web.jsbridge.demo;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import android.os.Looper;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.util.Log;
8 | import android.webkit.WebView;
9 | import android.webkit.WebViewClient;
10 |
11 | import butterknife.BindView;
12 | import butterknife.ButterKnife;
13 | import butterknife.OnClick;
14 | import dev.xesam.android.web.jsbridge.ClientCallback;
15 | import dev.xesam.android.web.jsbridge.JsBridge;
16 | import dev.xesam.android.web.jsbridge.MarshallableString;
17 | import dev.xesam.android.web.jsbridge.ServerCallback;
18 | import dev.xesam.android.web.jsbridge.SimpleServerHandler;
19 |
20 | public class MainActivity extends AppCompatActivity {
21 |
22 | @BindView(R.id.webview)
23 | public WebView vWebView;
24 |
25 | JsBridge jsBridge;
26 |
27 | @Override
28 | protected void onCreate(Bundle savedInstanceState) {
29 | super.onCreate(savedInstanceState);
30 | setContentView(R.layout.activity_main);
31 | ButterKnife.bind(this);
32 |
33 | JsBridge.DEBUG = true;
34 |
35 | vWebView = (WebView) findViewById(R.id.webview);
36 | jsBridge = new JsBridge(vWebView);
37 |
38 | vWebView.setWebViewClient(new WebViewClient() {
39 |
40 | @Override
41 | public void onPageFinished(WebView view, String url) {
42 | super.onPageFinished(view, url);
43 | Log.e("onPageFinished", url);
44 | jsBridge.monitor(url);
45 | }
46 | });
47 |
48 | jsBridge.register(new SimpleServerHandler("showPackageName") {
49 | @Override
50 | public void handle(String param, ServerCallback serverCallback) {
51 | new Handler(Looper.getMainLooper()).post(new Runnable() {
52 | @Override
53 | public void run() {
54 | String packageName = getPackageName();
55 | Tip.showTip(getApplicationContext(), "showPackageName:" + packageName);
56 | }
57 | });
58 | }
59 | });
60 | jsBridge.register(new UserHandler(this));
61 | vWebView.loadUrl("file:///android_asset/index.html");
62 | }
63 |
64 | @Override
65 | protected void onDestroy() {
66 | super.onDestroy();
67 | jsBridge.destroy();
68 | }
69 |
70 | @Override
71 | public void onBackPressed() {
72 | if (vWebView.canGoBack()) {
73 | vWebView.goBack();
74 | } else {
75 | super.onBackPressed();
76 | }
77 | }
78 |
79 | @OnClick(R.id.eval)
80 | public void performEval() {
81 | jsBridge.eval("window.jsFn1()");
82 | }
83 |
84 | @OnClick(R.id.invoke_1)
85 | public void invoke1() {
86 | jsBridge.invoke("jsFn1");
87 | }
88 |
89 | @OnClick(R.id.invoke_2)
90 | public void invoke2() {
91 | jsBridge.invoke("jsFn2", new MarshallableString("xesam"));
92 | }
93 |
94 | @OnClick(R.id.invoke_3)
95 | public void invoke3() {
96 | jsBridge.invoke("jsFn3", new ClientCallback