增加资源探查
This commit is contained in:
parent
9c8fbad7cc
commit
00972a2b46
|
@ -2,7 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.hty.browser"
|
||||
android:versionCode="4"
|
||||
android:versionName="4.24">
|
||||
android:versionName="4.26">
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher"
|
||||
|
|
|
@ -9,11 +9,11 @@ p { text-indent:2em; }
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V4.24</h2>
|
||||
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V4.26</h2>
|
||||
<p>内置扩展的浏览器。</p>
|
||||
<p>扩展:链接关键字过滤,链接关键字高亮,图片自定义过滤,视频独立播放。</p>
|
||||
<p>作者:海天鹰</p>
|
||||
<p>源码:<a href="https://gitee.com/sonichy/HTYBrowser_Android/" target="_blank">https://gitee.com/sonichy/HTYBrowser_Android/</a></p>
|
||||
<p>源码:<a href="https://www.gitlink.org.cn/sonichy/HTYBrowser" target="_blank">https://www.gitlink.org.cn/sonichy/HTYBrowser</a></p>
|
||||
<p>E-mail:sonichy@163.com</p>
|
||||
<h3>参考:</h3>
|
||||
<p><a href="https://gitee.com/daiji111/flying_browser/blob/master/app/src/main/java/com/daiji/feixiang/BrowserActivity.java">多窗口管理</a></p>
|
||||
|
@ -23,8 +23,10 @@ p { text-indent:2em; }
|
|||
<p><a href="https://stackoverflow.com/questions/3462582/display-the-android-webviews-favicon" target="_blank">获取网页图标</a></p>
|
||||
<p><a href="https://www.jianshu.com/p/c9a18050a249" target="_blank">字符串转Bitmap</a></p>
|
||||
<h3>更新日志:</h3>
|
||||
<h3>V4.26 (2022-07-13)</h3><ol><li>增加页面信息。</li><li>增加资源探查。</li></ol>
|
||||
<h3>V4.25 (2022-05-24)</h3><ol><li>修复点击开始浏览按钮,编辑栏不消失问题。</li><li>收藏页删除记住位置。</li><li>再次点击App,如果已经有页面,不打开新页面。</li></ol>
|
||||
<h3>V4.24 (2022-04-27)</h3><ol><li>修复网页未加载,地址栏没有更新的问题。</li><li>优化错误信息页面。</li><li>链接增加分享菜单。</li><li>增加接收分享。</li><li>如果不是最后一页,点击返回关闭当前页。</li><li>加入QQ、微信、阿里云盘文件打开列表。</li></ol>
|
||||
<h3>V4.23 (2021-12-14)</h3><ol><li>增加保存网页,但是存在严重问题,< 全变成 \u003C。</li></ol>
|
||||
<h3>V4.23 (2021-12-14)</h3><ol><li>增加保存网页,但是存在严重问题,< 全变成 \u003C。待选解决方案:<a href="https://blog.csdn.net/x2L5gX/article/details/118122921" target="_blank">StringEscapeUtils.unescapeEcmaScript(html),依赖库commons-text。</a></li></ol>
|
||||
<h3>V4.22 (2021-12-02)</h3><ol><li>解决高亮扩展链接内部含有 <font color="*">,文字颜色设置失效问题。</li></ol>
|
||||
<h3>V4.21 (2021-11-21)</h3><ol><li>收藏夹增加在新窗口打开。</li><li>简化视频截图代码。</li></ol>
|
||||
<h3>V4.20 (2021-08-10)</h3><ol><li><a href="https://blog.csdn.net/woaixiaozhe/article/details/7575976" _target="_blank">双击返回键退出</a></li></ol>
|
||||
|
|
|
@ -243,6 +243,7 @@ public class FavoriteActivity extends Activity {
|
|||
builder.create().show();
|
||||
break;
|
||||
case 4:
|
||||
position = listView.getFirstVisiblePosition();
|
||||
int id = Integer.parseInt(((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString());
|
||||
DBHelper helper = new DBHelper(getApplicationContext());
|
||||
helper.del(id);
|
||||
|
@ -292,7 +293,7 @@ public class FavoriteActivity extends Activity {
|
|||
});
|
||||
listView.setAdapter(adapter);
|
||||
Log.e(Thread.currentThread().getStackTrace()[2] + "", position + "");
|
||||
//listView.setSelection(position);
|
||||
listView.setSelection(position);
|
||||
}
|
||||
|
||||
class EditChangedListener implements TextWatcher {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.hty.browser;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
@ -17,7 +16,6 @@ import java.net.HttpURLConnection;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -30,7 +28,6 @@ import android.Manifest;
|
|||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
|
@ -100,7 +97,6 @@ import android.widget.ImageButton;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
//import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -126,10 +122,10 @@ public class MainActivity extends Activity {
|
|||
int currentPage;
|
||||
int FILECHOOSER_DOWNLOAD_PATH = 3;
|
||||
DownloadCompleteReceiver receiver;
|
||||
private static String[] PERMISSIONS = {
|
||||
final String[] PERMISSIONS = {
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE };
|
||||
private static int REQUEST_PERMISSION_CODE = 1;
|
||||
final int REQUEST_PERMISSION_CODE = 1;
|
||||
Boolean isExit = false;
|
||||
ClipboardManager clipboardManager;
|
||||
|
||||
|
@ -343,6 +339,9 @@ public class MainActivity extends Activity {
|
|||
case R.id.button_go:
|
||||
//loadPage(editText1.getText().toString());
|
||||
list_webView.get(currentPage).loadUrl(editText_url.getText().toString());
|
||||
IMM.hideSoftInputFromWindow(editText_url.getWindowToken(), 0);
|
||||
button_title.setVisibility(View.VISIBLE);
|
||||
editText_url.setVisibility(View.GONE);
|
||||
break;
|
||||
case R.id.button_back:
|
||||
if (list_webView.get(currentPage).canGoBack()) {
|
||||
|
@ -673,7 +672,7 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
|
||||
private void MenuDialog() {
|
||||
String[] items = { "新建窗口", "关闭当前窗口", "收藏当前页", "收藏夹", "查找", "分享", "视频独立播放", "视频截图", "视频在播放器中打开", "查看源码", "保存", "全屏", "广告过滤规则", "设置", "检查更新", "关于", "退出", "清除缓存" };
|
||||
String[] items = { "新建窗口", "关闭当前窗口", "收藏当前页", "收藏夹", "查找", "分享", "网页信息", "视频独立播放", "视频截图", "视频在播放器中打开", "资源探查", "查看源码", "保存", "全屏", "广告过滤规则", "清除当前页面缓存", "设置", "检查更新", "关于", "退出" };
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("菜单");
|
||||
//builder.setIcon(android.R.drawable.ic_menu_preferences);
|
||||
|
@ -808,10 +807,18 @@ public class MainActivity extends Activity {
|
|||
startActivity(Intent.createChooser(intent, "分享"));
|
||||
break;
|
||||
case 6:
|
||||
AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this);
|
||||
builder1.setIcon(android.R.drawable.ic_dialog_info);
|
||||
builder1.setTitle("网页信息");
|
||||
builder1.setMessage("标题:\n" + ptitle + "\n\n网址:\n" + urln);
|
||||
builder1.setPositiveButton("确定", null);
|
||||
builder1.create().show();
|
||||
break;
|
||||
case 7:
|
||||
String js = "javascript:var videos=document.getElementsByTagName('video'); if(videos.length!=0){ var url=videos[0].src;window.location.href=url; } else { var iframes=document.getElementsByTagName('iframe'); if(iframes.length!=0) window.location.href=iframes[0].src; }";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
break;
|
||||
case 7:
|
||||
case 8:
|
||||
js = "javascript:function capture(){var videos=document.getElementsByTagName('video');if(videos.length==0){var iframe=document.getElementsByTagName('iframe');videos=iframe[0].contentWindow.document.getElementsByTagName('video');}var canvas=document.createElement('canvas');videos[0].crossOrigin='*';canvas.width=videos[0].videoWidth;canvas.height=videos[0].videoHeight;canvas.getContext('2d').drawImage(videos[0],0,0,canvas.width,canvas.height);var s = canvas.toDataURL('image/jpeg',1.0); return s;}";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
list_webView.get(currentPage).evaluateJavascript("javascript:capture()", new ValueCallback<String>() {
|
||||
|
@ -851,7 +858,7 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
});
|
||||
break;
|
||||
case 8:
|
||||
case 9:
|
||||
//网址正确,运行崩溃,本地播放器没有注册网络视频类型?
|
||||
js = "javascript:function getVideoUrl(){var video_url='';var videos=document.getElementsByTagName('video');if(videos.length==0){var iframe=document.getElementsByTagName('iframe');videos=iframe[0].contentWindow.document.getElementsByTagName('video');}else{video_url=videos[0].src;}return video_url;}";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
|
@ -874,47 +881,64 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
});
|
||||
break;
|
||||
case 9://查看源码改多标签后失效
|
||||
case 10:
|
||||
js = "javascript:function inspect(){var videos=document.getElementsByTagName('video');var array_video=new Array();for(var i=0;i<videos.length;i++){array_video.push(videos[i].src);}var array_iframe=new Array();var iframes=document.getElementsByTagName('iframe');for(var i=0;i<iframes.length;i++){array_iframe.push(iframes[i].src);}var array_img=new Array();var imgs=document.getElementsByTagName('img');for(var i=0;i<imgs.length;i++){array_img.push(imgs[i].src);}return{array_video,array_iframe,array_img}}";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
list_webView.get(currentPage).evaluateJavascript("javascript:inspect()", new ValueCallback<String>() {
|
||||
@Override
|
||||
public void onReceiveValue(String value) {
|
||||
//Log.e(Thread.currentThread().getStackTrace()[2] + "", value);
|
||||
newWindow("");
|
||||
String html = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'/><title>资源探查</title><style>h1{text-align:center;}a{text-decoration:none;}video,img{max-width:100%;}</style></head><body><h1>视频</h1><div id='div_video'></div><h1>框架</h1><div id='div_iframe'></div><h1>图片</h1><div id='div_img'></div></body><script>var div_video=document.getElementById('div_video');var json=eval((" + value + "));var videos=json.array_video;for(var i=0; i<videos.length; i++){var video=document.createElement('video');video.src=videos[i];video.controls='controls';div_video.append(video);}var iframes=json.array_iframe;for(var i=0; i<iframes.length; i++){var p = document.createElement('p');var a=document.createElement('a');a.textContent=iframes[i];a.href=iframes[i];a.target='_blank';p.append(a);div_iframe.append(p);}var imgs=json.array_img;for(var i=0; i<imgs.length; i++){var img=document.createElement('img');img.src=imgs[i];div_img.append(img);}</script></html>";
|
||||
list_webView.get(currentPage).loadData(html, "text/html; charset=UTF-8", null);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 11://查看源码改多标签后失效
|
||||
js = "javascript:var s='<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'; document.body.innerHTML=''; var pre=document.createElement('pre'); document.body.appendChild(pre); pre.textContent=s;";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
break;
|
||||
case 10:
|
||||
case 12:
|
||||
js = "javascript:function save(){var s='<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'; return s;}";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
list_webView.get(currentPage).evaluateJavascript("javascript:save()", new ValueCallback<String>() {
|
||||
@Override
|
||||
public void onReceiveValue(String value) {
|
||||
Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + value);
|
||||
// < 变成 \u003C
|
||||
//https://blog.csdn.net/x2L5gX/article/details/118122921
|
||||
//import org.apache.commons.text.StringEscapeUtils;
|
||||
//value = StringEscapeUtils.unescapeJava(value);
|
||||
//Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + value);
|
||||
writeFile(button_title.getText().toString() + ".htm", value);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case 11:
|
||||
case 13:
|
||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
LinearLayout2.setVisibility(View.GONE);
|
||||
pgb1.setVisibility(View.GONE);
|
||||
isFullScreen = true;
|
||||
break;
|
||||
case 12:
|
||||
case 14:
|
||||
DialogBlockList();
|
||||
break;
|
||||
case 13:
|
||||
case 15:
|
||||
list_webView.get(currentPage).clearCache(true);
|
||||
break;
|
||||
case 16:
|
||||
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
|
||||
break;
|
||||
case 14:
|
||||
case 17:
|
||||
isManualCheckUpdate = true;
|
||||
new Thread(CU).start();
|
||||
break;
|
||||
case 15:
|
||||
case 18:
|
||||
newWindow("file:///android_asset/about.htm");
|
||||
break;
|
||||
case 16:
|
||||
case 19:
|
||||
unregisterReceiver(receiver);
|
||||
MainActivity.this.finish();
|
||||
break;
|
||||
case 17:
|
||||
list_webView.get(currentPage).clearCache(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1204,7 +1228,8 @@ public class MainActivity extends Activity {
|
|||
void newWindow(String surl) {
|
||||
WebView webView = new WebView(MainActivity.this);
|
||||
settingWebView(webView);
|
||||
webView.loadUrl(surl);
|
||||
if (!surl.equals(""))
|
||||
webView.loadUrl(surl);
|
||||
webViewLayout.removeAllViews();
|
||||
webViewLayout.addView(webView);
|
||||
list_webView.add(webView);
|
||||
|
@ -1286,7 +1311,7 @@ public class MainActivity extends Activity {
|
|||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
//Toast.makeText(getApplicationContext(), "ReceivedError:" + errorCode, Toast.LENGTH_SHORT).show();
|
||||
//if (isNetworkConnected()) {
|
||||
switch (errorCode) {
|
||||
switch (errorCode) {
|
||||
// case WebViewClient.ERROR_HOST_LOOKUP: // 找不到主机,跳转百度搜索
|
||||
// Log.e(Thread.currentThread().getStackTrace()[2] + "", failingUrl);
|
||||
// String url = "http://m.baidu.com/s?word=" + urlo;
|
||||
|
@ -1294,12 +1319,12 @@ public class MainActivity extends Activity {
|
|||
// view.loadUrl(url);
|
||||
// urln = url;
|
||||
// break;
|
||||
default:
|
||||
Log.e(Thread.currentThread().getStackTrace()[2] + "", failingUrl);
|
||||
view.loadDataWithBaseURL(failingUrl, "<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><title>" + failingUrl + "</title><body><h1>无法访问此网站</h1><p>" + failingUrl + " 无法访问,因为:<br>" + description + "</p></body></html>", "text/html", "utf-8", "");
|
||||
}
|
||||
default:
|
||||
Log.e(Thread.currentThread().getStackTrace()[2] + "", failingUrl);
|
||||
view.loadDataWithBaseURL(failingUrl, "<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><title>" + failingUrl + "</title><body><h1>无法访问此网站</h1><p>" + failingUrl + " 无法访问,因为:<br>" + description + "</p></body></html>", "text/html", "utf-8", "");
|
||||
}
|
||||
//} else {
|
||||
// view.loadDataWithBaseURL("", "<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><title>网络未连接</title><style>h1{font-size:10vw;margin:40vh auto;text-align:center;}</style><body><h1>网络未连接</h1></body></html>", "text/html", "utf-8", "");
|
||||
// view.loadDataWithBaseURL("", "<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><title>网络未连接</title><style>h1{font-size:10vw;margin:40vh auto;text-align:center;}</style><body><h1>网络未连接</h1></body></html>", "text/html", "utf-8", "");
|
||||
//}
|
||||
}
|
||||
});
|
||||
|
@ -1336,7 +1361,7 @@ public class MainActivity extends Activity {
|
|||
|
||||
// JS的alert('')提示信息转换成安卓控件提示信息
|
||||
@Override
|
||||
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
|
||||
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
|
||||
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||
result.confirm();
|
||||
return true;
|
||||
|
@ -1427,7 +1452,7 @@ public class MainActivity extends Activity {
|
|||
|
||||
@Override
|
||||
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
||||
Log.d("onConsoleMessage", consoleMessage.message() + " at " + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber());
|
||||
Log.e("onConsoleMessage: " + consoleMessage.lineNumber(), consoleMessage.message());
|
||||
return super.onConsoleMessage(consoleMessage);
|
||||
}
|
||||
|
||||
|
@ -1438,9 +1463,10 @@ public class MainActivity extends Activity {
|
|||
super.onGeolocationPermissionsShowPrompt(origin, callback);
|
||||
}
|
||||
|
||||
// target="_blank" 处理,Android 11 崩溃无Log
|
||||
// target="_blank" 处理,Android >11 崩溃无Log
|
||||
@Override
|
||||
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
|
||||
Log.e("_blank", view + ", " + isDialog + "," + isUserGesture + ", " + resultMsg);
|
||||
if (isUserGesture) {
|
||||
WebView webView = new WebView(MainActivity.this);
|
||||
settingWebView(webView);
|
||||
|
@ -1462,6 +1488,7 @@ public class MainActivity extends Activity {
|
|||
|
||||
void getDataFromIntent(Intent intent) {
|
||||
//Log.e(Thread.currentThread().getStackTrace()[2] + "", "intent(" + intent + ")");
|
||||
if (list_webView.size() != 0 && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) return;
|
||||
if (intent.getAction().equals(Intent.ACTION_VIEW)) {
|
||||
urln = intent.getDataString();
|
||||
newWindow(urln);
|
||||
|
|
Loading…
Reference in New Issue