Skip to content

Commit e125e10

Browse files
committed
精简项目结构,拆解为更易用的接口
1 parent cafebdc commit e125e10

20 files changed

+489
-1574
lines changed

AndroidManifest.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@
1515
<uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
1616
<application
1717
android:label="@string/app_name"
18-
android:icon="@drawable/ic_launcher"
19-
android:name=".MainApp">
18+
android:icon="@drawable/ic_launcher">
2019
<activity
21-
android:name=".page.WebActivity"
20+
android:name=".demo.WebActivity"
2221
android:label="@string/app_name">
2322
<intent-filter>
2423
<action android:name="android.intent.action.MAIN"/>

assets/test.html

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -83,18 +83,6 @@ <h3>Java Interface 可用接口列表测试</h3>
8383
<button onclick="HostApp.alert(HostApp.getIMSI());">测试</button>
8484
</li>
8585

86-
<br/>
87-
<li>
88-
是否存在纵向滚动条<br/>
89-
代码:<br/>
90-
<div>
91-
HostApp.alert(
92-
HostApp.existVerticalScrollbar()
93-
);
94-
</div>
95-
<button onclick="HostApp.alert(HostApp.existVerticalScrollbar());">测试</button>
96-
</li>
97-
9886
<br/>
9987
<li>
10088
传入JSON对象,返回对象的一个键值字符串<br/>
@@ -121,7 +109,7 @@ <h3>Java Interface 可用接口列表测试</h3>
121109

122110
<br/>
123111
<li>
124-
传入回调的js函数给Java方法,设定3秒后回调<br/>
112+
异步回调,传入js函数到Java方法,设定3秒后回调<br/>
125113
代码:<br/>
126114
<div>
127115
HostApp.delayJsCallBack(3, 'call back haha', function (msg) {
@@ -131,20 +119,6 @@ <h3>Java Interface 可用接口列表测试</h3>
131119
<button onclick="HostApp.delayJsCallBack(3, 'call back haha', function (msg) {HostApp.alert(msg);});">测试</button>
132120
</li>
133121

134-
<br/>
135-
<li>
136-
注册浏览器滚动到底部时的JS回调函数<br/>
137-
代码:<br/>
138-
<div>
139-
if (HostApp.existVerticalScrollbar()) {
140-
HostApp.setOnScrollBottomListener (40, function (contentHeight) {
141-
HostApp.toast("reach content(height " + contentHeight + ") bottom");
142-
});
143-
}
144-
</div>
145-
<button style="width: 150px;" onclick="HostApp.resetContentHeight();window.scroll(0, window.document.body.scrollHeight);">直接滚动到底部</button>
146-
</li>
147-
148122
<br/>
149123
<li>
150124
重载方法测试-执行整型定义<br/>
@@ -194,16 +168,5 @@ <h3>Java Interface 可用接口列表测试</h3>
194168
</li>
195169
</ul>
196170

197-
198-
<script type="text/javascript">
199-
$(function () {
200-
//HostApp.alert("document ready now");
201-
HostApp.setOnScrollBottomListener (40, function (contentHeight) {
202-
HostApp.toast("reach content(height " + contentHeight + ") bottom");
203-
});
204-
});
205-
</script>
206-
207-
208171
</body>
209172
</html>

res/layout/main.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/cn/pedant/SafeJava4WebviewJS/MainApp.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/cn/pedant/SafeJava4WebviewJS/webview/BaseWebChromeClient.java renamed to src/cn/pedant/SafeJava4WebviewJS/bridge/InjectedChromeClient.java

Lines changed: 57 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,57 @@
1-
/**
2-
* Summary: 应用中使用的WebChromeClient基类
3-
* Version 1.0
4-
* Date: 13-11-8
5-
* Time: 下午2:31
6-
* Copyright: Copyright (c) 2013
7-
*/
8-
9-
package cn.pedant.SafeJava4WebviewJS.webview;
10-
11-
import android.webkit.*;
12-
import cn.pedant.SafeJava4WebviewJS.MainApp;
13-
import cn.pedant.SafeJava4WebviewJS.util.Log;
14-
15-
16-
public class BaseWebChromeClient extends WebChromeClient {
17-
private static BaseWebChromeClient mInstance;
18-
19-
public static BaseWebChromeClient getInstance () {
20-
if (mInstance == null) {
21-
mInstance = new BaseWebChromeClient();
22-
}
23-
return mInstance;
24-
}
25-
26-
// 处理Alert事件
27-
@Override
28-
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
29-
result.confirm();
30-
return true;
31-
}
32-
33-
@Override
34-
public void onProgressChanged (WebView view, int newProgress) {
35-
BaseWebView baseWebView = (BaseWebView)view;
36-
//为什么要在这里注入JS
37-
//1 OnPageStarted中注入有可能全局注入不成功,导致页面脚本上所有接口任何时候都不可用
38-
//2 OnPageFinished中注入,虽然最后都会全局注入成功,但是完成时间有可能太晚,当页面在初始化调用接口函数时会等待时间过长
39-
//3 在进度变化时注入,刚好可以在上面两个问题中得到一个折中处理
40-
//为什么是进度大于25%才进行注入,因为从测试看来只有进度大于这个数字页面才真正得到框架刷新加载,保证100%注入成功
41-
if (newProgress > 25 && !baseWebView.isInjectedJS()) {
42-
baseWebView.loadJS(MainApp.getIns().getJsCallJava().getPreloadInterfaceJS());
43-
baseWebView.setIsInjectedJS(true);
44-
Log.d(" inject js interface completely on progress " + newProgress);
45-
}
46-
super.onProgressChanged(view, newProgress);
47-
}
48-
49-
@Override
50-
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
51-
result.confirm(MainApp.getIns().getJsCallJava().call(view, message));
52-
return true;
53-
}
54-
55-
@Override
56-
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
57-
// we MUST return true we are done with debugging
58-
return !MainApp.IS_DEBUGING; // return false to enable console.log
59-
}
60-
}
1+
/**
2+
* Summary: 应用中使用的WebChromeClient基类
3+
* Version 1.0
4+
* Date: 13-11-8
5+
* Time: 下午2:31
6+
* Copyright: Copyright (c) 2013
7+
*/
8+
9+
package cn.pedant.SafeJava4WebviewJS.bridge;
10+
11+
import android.util.Log;
12+
import android.webkit.JsPromptResult;
13+
import android.webkit.JsResult;
14+
import android.webkit.WebChromeClient;
15+
import android.webkit.WebView;
16+
17+
18+
public class InjectedChromeClient extends WebChromeClient {
19+
private final String TAG = "InjectedChromeClient";
20+
private JsCallJava mJsCallJava;
21+
private boolean mIsInjectedJS;
22+
23+
public InjectedChromeClient (Class injectedCls) {
24+
mJsCallJava = new JsCallJava(injectedCls);
25+
}
26+
27+
// 处理Alert事件
28+
@Override
29+
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
30+
result.confirm();
31+
return true;
32+
}
33+
34+
@Override
35+
public void onProgressChanged (WebView view, int newProgress) {
36+
//为什么要在这里注入JS
37+
//1 OnPageStarted中注入有可能全局注入不成功,导致页面脚本上所有接口任何时候都不可用
38+
//2 OnPageFinished中注入,虽然最后都会全局注入成功,但是完成时间有可能太晚,当页面在初始化调用接口函数时会等待时间过长
39+
//3 在进度变化时注入,刚好可以在上面两个问题中得到一个折中处理
40+
//为什么是进度大于25%才进行注入,因为从测试看来只有进度大于这个数字页面才真正得到框架刷新加载,保证100%注入成功
41+
if (newProgress <= 25) {
42+
mIsInjectedJS = false;
43+
} else if (!mIsInjectedJS) {
44+
view.loadUrl(mJsCallJava.getPreloadInterfaceJS());
45+
mIsInjectedJS = true;
46+
Log.d(TAG, " inject js interface completely on progress " + newProgress);
47+
48+
}
49+
super.onProgressChanged(view, newProgress);
50+
}
51+
52+
@Override
53+
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
54+
result.confirm(mJsCallJava.call(view, message));
55+
return true;
56+
}
57+
}

0 commit comments

Comments
 (0)