资源探查脚本支持返回多个对象

This commit is contained in:
sonichy 2022-11-08 00:02:57 +08:00
parent bc8c7c0a46
commit 3b9c3f1a27
7 changed files with 29 additions and 13 deletions

BIN
app.apk

Binary file not shown.

View File

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hty.browser"
android:versionCode="4"
android:versionName="4.26">
android:versionName="4.28">
<application
android:icon="@drawable/ic_launcher"

View File

@ -9,7 +9,7 @@ p { text-indent:2em; }
</style>
</head>
<body>
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V4.26</h2>
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V4.28</h2>
<p>内置扩展的浏览器。</p>
<p>扩展:链接关键字过滤,链接关键字高亮,图片自定义过滤,视频独立播放。</p>
<p>作者:海天鹰</p>
@ -23,7 +23,9 @@ 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.28 (2022-11-07)</h3><ol><li>资源探查脚本支持返回多个对象。<br>分类标题增加数量。<br>使用 &lt;details&gt; 代替 &lt;div&gt;,分类可折叠。</li></ol>
<h3>V4.27 (2022-10-22)</h3><ol><li>修改收藏夹数据库目录。</li><li>收藏夹增加分享数据库功能。</li></ol>
<h3>V4.26 (2022-07-23)</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待选解决方案<a href="https://blog.csdn.net/x2L5gX/article/details/118122921" target="_blank">StringEscapeUtils.unescapeEcmaScript(html)依赖库commons-text。</a></li></ol>

View File

@ -9,8 +9,8 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = MainActivity.dir + File.separator + "webfav.db";
public static final String filename = "webfav.db";
public static final String DATABASE_NAME = MainActivity.dir + File.separator + filename;
private final static int VERSION = 1;
static String TableName = "webfav";
private SQLiteDatabase db;

View File

@ -10,6 +10,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
@ -96,7 +97,7 @@ public class FavoriteActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
String[] sm = { "导出HTML", "导出CSV" };
String[] sm = { "分享数据库", "导出HTML", "导出CSV" };
for (int i=0; i<sm.length; i++) {
menu.add(0, i, i, sm[i]);
}
@ -108,6 +109,18 @@ public class FavoriteActivity extends Activity {
int id = item.getItemId();
switch (id) {
case 0:
File file = new File(DBHelper.DATABASE_NAME);
if (file.exists()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setType("*/*");
startActivity(Intent.createChooser(intent, "分享 " + DBHelper.filename));
} else {
Toast.makeText(getApplicationContext(), "数据库文件不存在", Toast.LENGTH_SHORT).show();
}
break;
case 1:
String s = "<html>\n<head>\n<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\"/>\n<title>收藏夹</title>\n<style>a { text-decoration:none; }\ntable { table-layout:fixed; width:100%; border-collapse:collapse; }\nth, td { border:1px solid black; padding:5px; overflow:hidden; text-overflow: ellipsis; }\n</style>\n</head>\n<body>\n<h2 align=center>收藏夹" + adapter.getCount() + "</h2>\n<table>\n<tr><th>标题</th><th>网址</th></tr>\n";
for (int i=0; i<adapter.getCount(); i++){
LinearLayout layout = (LinearLayout) listView.getAdapter().getView(i, null, null);
@ -118,7 +131,7 @@ public class FavoriteActivity extends Activity {
s += "</table>\n</body>\n</html>";
writeFile("webfav.htm", s);
break;
case 1:
case 2:
s = "";
for (int i=0; i<adapter.getCount(); i++){
LinearLayout layout = (LinearLayout) listView.getAdapter().getView(i, null, null);

View File

@ -110,8 +110,8 @@ public class MainActivity extends Activity {
InputMethodManager IMM;
ProgressBar pgb1;
String urlo = "", HTRE = "", ptitle = "", urln = "";
String urlVersion = "https://raw.githubusercontent.com/sonichy/Android_HTYBrowser/master/version";
String urlUpdate = "https://raw.githubusercontent.com/sonichy/Android_HTYBrowser/master/app.apk";
String urlVersion = "https://www.gitlink.org.cn/api/sonichy/HTYBrowser/raw?filepath=version&ref=master";
String urlUpdate = "https://www.gitlink.org.cn/api/sonichy/HTYBrowser/raw?filepath=app.apk&ref=master";
CustomViewCallback customViewCallback;
boolean isFullScreen, isManualCheckUpdate = false;
static File dir;
@ -142,7 +142,7 @@ public class MainActivity extends Activity {
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
IMM = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
String path = Environment.getExternalStorageDirectory().getPath() + File.separator + "HTYBrowser";
String path = Environment.getExternalStorageDirectory().getPath() + File.separator + "HTY" + File.separator + "Browser";
dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
@ -882,14 +882,15 @@ public class MainActivity extends Activity {
});
break;
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}}";
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 audios=document.getElementsByTagName('audio');var array_audio=new Array();for(var i=0;i<audios.length;i++){array_audio.push(audios[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);}var json={videos:array_video,audios:array_audio,iframes:array_iframe,imgs:array_img};return json;}";
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>";
String html = "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>\n<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'/>\n<title>资源探查</title>\n<style>\nsummary{text-align:center;font-size:2em;font-weight:bold;}\na{text-decoration:none;}\nvideo,img{max-width:100%;}\n</style>\n</head>\n<body>\n<details id='details_video'>\n<summary id='summary_video'>视频</summary>\n</details>\n<details id='details_audio'>\n<summary id='summary_audio'>音频</summary>\n</details>\n<details id='details_iframe'>\n<summary id='summary_iframe'>框架</summary>\n</details>\n<details id='details_img'>\n<summary id='summary_img'>图片</summary>\n</details>\n<script>\nvar details_video=document.getElementById('details_video');\nvar details_audio=document.getElementById('details_audio');\nvar details_iframe=document.getElementById('details_iframe');\nvar details_img=document.getElementById('details_img');\nvar summary_video=document.getElementById('summary_video');\nvar summary_audio=document.getElementById('summary_audio');\nvar summary_iframe=document.getElementById('summary_iframe');\nvar summary_img=document.getElementById('summary_img');\nvar json=eval((" + value.replace("\"", "'") + "));\nvar videos=json.videos;\nsummary_video.innerText='视频'+videos.length;\nfor(var i=0; i<videos.length; i++){\nvar video=document.createElement('video');\nvideo.src=videos[i];\nvideo.controls='controls';\ndetails_video.append(video);\nvar a=document.createElement('a');\na.href=videos[i];\na.textContent=videos[i];\na.target='_blank';\ndetails_video.appendChild(a);\n}\nvar audios=json.audios;\nsummary_audio.innerText='音频'+audios.length;\nfor(var i=0; i<audios.length; i++){\nvar audio=document.createElement('audio');\naudio.src=audios[i];\ndetails_audio.appendChild(audio);\n}\nvar iframes=json.iframes;\nsummary_iframe.innerText='框架'+iframes.length;\nfor(var i=0; i<iframes.length; i++){\nvar p = document.createElement('p');\nvar a=document.createElement('a');\na.textContent=iframes[i];\na.href=iframes[i];\na.target='_blank';\np.appendChild(a);\ndetails_iframe.appendChild(p);\n}\nvar imgs=json.imgs;\nsummary_img.innerText='图片'+imgs.length;\nfor(var i=0; i<imgs.length; i++){\nvar img=document.createElement('img');\nimg.src=imgs[i];\ndetails_img.appendChild(img);\n}\n</script>\n</body>\n</html>";
//writeFile("inspect.htm", html);
list_webView.get(currentPage).loadData(html, "text/html; charset=UTF-8", null);
}
});

View File

@ -1 +1 @@
4.26
4.28