├── .gitignore ├── README.md ├── WebViewJavascriptBridge ├── .classpath ├── .gitignore ├── .project ├── .settings │ └── org.eclipse.jdt.core.prefs ├── AndroidManifest.xml ├── assets │ ├── ExampleApp.html │ └── WebViewJavascriptBridge.js.txt ├── gen │ └── com │ │ └── example │ │ └── test │ │ ├── BuildConfig.java │ │ └── R.java ├── libs │ └── android-support-v4.jar ├── project.properties ├── res │ ├── drawable-hdpi │ │ └── ic_launcher.png │ ├── drawable-mdpi │ │ └── ic_launcher.png │ ├── drawable-xhdpi │ │ └── ic_launcher.png │ ├── drawable-xxhdpi │ │ └── ic_launcher.png │ ├── layout │ │ └── activity_main.xml │ └── values │ │ └── strings.xml └── src │ └── com │ └── example │ └── test │ ├── MainActivity.java │ └── WVJBWebViewClient.java └── tb408s.h5 /.gitignore: -------------------------------------------------------------------------------- 1 | /WebViewJavascriptBridge/bin 2 | .DS_Store 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WebViewJavascriptBridge 2 | WebViewJavascriptBridge for Android 是 WebViewJavascriptBridge for iOS/OSX的Android 实现, 项目里的WebViewJavascriptBridge.js.txt, 及测试网页ExampleApp.html 直接来自 WebViewJavascriptBridge for iOS/OSX. 3 | 4 | 使用方法: 5 | 6 | 1. 复制WVJBWebViewClient.java 到 Android 项目 src 下的一个子目录中, 按需修改package名称; 7 | 2. 复制WebViewJavascriptBridge.js.txt到assets目录; 8 | 3. 子类化 WVJBWebViewClient, 例如: 9 | 10 | class MyWebViewClient extends WVJBWebViewClient { 11 | 12 | public MyWebViewClient(WebView webView) { 13 | 14 | //需要支持JS send 方法时 15 | super(webView, new WVJBWebViewClient.WVJBHandler() { 16 | @Override 17 | public void request(Object data, WVJBResponseCallback callback) { 18 | //处理代码 19 | } 20 | }); 21 | 22 | /* 23 | //不需要支持JS send 方法时 24 | super(webView); 25 | */ 26 | } 27 | 28 | @Override 29 | public void onPageFinished(WebView view, String url) { 30 | //处理代码 31 | super.onPageFinished(view, url); 32 | } 33 | 34 | @Override 35 | public boolean shouldOverrideUrlLoading(WebView view, String url) { 36 | //处理代码 37 | return super.shouldOverrideUrlLoading(view, url); 38 | } 39 | 40 | 4. 设置WebView 41 | webView.setWebViewClient(new MyWebViewClient(webView)); 42 | 43 | 5. 用 excuteJavascript 方法执行脚本: 44 | 45 | excuteJavascript(script); //不需要返回值, script前不要加javascript:前缀 46 | 47 | 或 48 | 49 | excuteJavascript(script, callback); //需要返回值, script前不要加javascript:前缀 50 | 51 | executeJavascript方法的内部实现机制: 52 | 53 | a. Android 4.4及更高版本下, 使用WebView.evaluateJavascript方法执行脚本; 54 | 55 | b. Android 4.4以下版本若需要返回值则采用addJavascriptInterface机制实现; 56 | 57 | c. Android 4.4以下版本若不需要返回值则使用loadUrl方法执行脚本. 58 | 59 | 60 | 6. WebViewJavascriptBridge for iOS/OSX 的下载地址: https://github.com/marcuswestin/WebViewJavascriptBridge 61 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/.gitignore: -------------------------------------------------------------------------------- 1 | /gen 2 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | WebViewJavascriptBridge 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 3 | org.eclipse.jdt.core.compiler.compliance=1.6 4 | org.eclipse.jdt.core.compiler.source=1.6 5 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/assets/ExampleApp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 |

WebViewJavascriptBridge Demo

11 | 74 |
75 | 76 | -------------------------------------------------------------------------------- /WebViewJavascriptBridge/assets/WebViewJavascriptBridge.js.txt: -------------------------------------------------------------------------------- 1 | ;(function() { 2 | if (window.WebViewJavascriptBridge) { return } 3 | var messagingIframe 4 | var sendMessageQueue = [] 5 | var receiveMessageQueue = [] 6 | var messageHandlers = {} 7 | 8 | var CUSTOM_PROTOCOL_SCHEME = 'wvjbscheme' 9 | var QUEUE_HAS_MESSAGE = '__WVJB_QUEUE_MESSAGE__' 10 | 11 | var responseCallbacks = {} 12 | var uniqueId = 1 13 | 14 | function _createQueueReadyIframe(doc) { 15 | messagingIframe = doc.createElement('iframe') 16 | messagingIframe.style.display = 'none' 17 | doc.documentElement.appendChild(messagingIframe) 18 | } 19 | 20 | function init(messageHandler) { 21 | if (WebViewJavascriptBridge._messageHandler) { throw new Error('WebViewJavascriptBridge.init called twice') } 22 | WebViewJavascriptBridge._messageHandler = messageHandler 23 | var receivedMessages = receiveMessageQueue 24 | receiveMessageQueue = null 25 | for (var i=0; i 4 | 5 | 10 | 11 | 17 | 18 |