diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5bd45cb2..3978773b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,10 @@ -create-pages: +pages: + stage: deploy script: - - echo "do nothing" - pages: - publish: . + - rm -rf public + - mkdir tpublic + - ls | grep -v tpublic | xargs cp -r -t tpublic + - mv tpublic public + artifacts: + paths: + - public diff --git a/README.md b/README.md index 74a832ae..9366450a 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,36 @@ ### Uweb browser: minimal suckless web browser with unlimited power 中文 -[Galaxy.Store](https://galaxystore.samsung.com/detail/info.torapp.uweb) +[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5) +[Galaxy.Store](https://galaxy.store/uweb) Downloads [Uweb browser: downloads, plugins and tips](https://torappinfo.github.io/uweb/en/) -(Mirrors: [grebe](https://uweb.grebedoc.dev) [gitlab](https://jamesfengcao.gitlab.io/uweb/en/) [frama](https://torappinfo.frama.io/uweb/en/) [codeberg](https://uweb.codeberg.page/en/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/en/index.html) [netlify](https://uwebzh.netlify.app/en/) [surge](https://uweb.surge.sh/en/) [kinsta](https://uwebbrowser-t27o4.kinsta.page) [bitbucket](https://torappinfo.bitbucket.io/en/) [pages](https://muweb.pages.dev/en/) [vercel](https://uweb.vercel.app/en/) [render](https://uweb.onrender.com/en/) [statichost](https://torappinfo-uweb.statichost.eu) [maozi](https://uweb.maozi.io) [storm](https://uweb.stormkit.dev) [pgs](https://uweb-m.pgs.sh) More...) +(Mirrors: [gitlab](https://jamesfengcao.gitlab.io/uweb/en/) [codeberg](https://jamesfengcao.codeberg.page/en/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/en/index.html) [4everland](https://uweb.4everland.app/en/) [fleek](https://uweb.on-fleek.app/en/) [cyclic](https://muweb.cyclic.app/en/) [netlify](https://uwebzh.netlify.app/en/) [surge](https://uweb.surge.sh/en/) [kinsta](https://uwebbrowser-t27o4.kinsta.page) [zeabur](https://uweb.zeabur.app/en/) [deno](https://posh-crab-23.deno.dev/en/) [bitbucket](https://torappinfo.bitbucket.io/en/) [pages](https://muweb.pages.dev/en/) [vercel](https://uweb.vercel.app/en/) [render](https://uweb.onrender.com/en/) [glitch](https://uweb.glitch.me/en/) More...) - - AI chat as search engine; optimized UI for both AI and traditional search; [input helpers](https://uwebzh.netlify.app/en/input/index.html#) for complex query. -- Global redirection to bypass censorship. -- Convenient: Any AI chatbot/book/dictionary/txt/command line/app/webapp (web extensions) as search engine. +- Powerful: any native functionality with html5 enhancement and still secure; any urls to host website; javascript and shell scripting for general processing; piping between console and GUI and more with Termux. +- Customizable: user-defined menus, (new) buttons and gestures for user agents, bookmarklets, url services, shell commands, internal functionality links and text processing etc. +- Convenient: Any AI chatbot/book (pdf/djvu)/dictionary (mdict)/txt/command line/app/webapp (web extensions) can be search engine. - Tiny: less than 250k. - Fast: run fast, even with thousands of user provided css/scripts/htmls. - Efficient: less touches, one click to reach any number of search engines without repeated input; automate online services. -- Powerful: any native functionality with html5 enhancement and still secure; any urls to host website; javascript and shell scripting for general processing. -- Customizable: user-defined menus, (new) buttons and gestures for user agents, bookmarklets, url services, shell commands, internal functionality links and text processing etc. - URL bar command line support ("!" and .js file as command). -- Site-specific JS/CSS/HTML/preprocessing, ex. "siteextra/[domain.sanitizer]" support. +- Site-specific JS/CSS/HTML/preprocessing. - Online play/preview/preprocess for downloadable resources. - Multiple type profiles: switch any data including website logins, user configurations orthogonally. - Supports enhanced user "hosts" file. Empty IP address to lift all server-imposed limitations. - Website test automation scripting. crontab support (alarm clock and more). #### Main features -Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup & restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, Wake-on-LAN, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.). +Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup & restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.). +- User-defined global and site-specific CSS and javascript. - Bookmarklets (works for CSP sites and with option to auto apply to similar sites) - AD blocking (block whole root domain trees etc.) +- Customization (define extra menus/buttons/gestures with user-defined functionalities) +- Support shell scripts, javascript for general processing, other languages (python etc.) are also supported by installing uweb compatible Termux versions. - Serverless local sites: PWA-kind web extension (chrome .crx & firefox .xpi) support. +- Piping between console and uweb tabs. - Resizable floating video support. #### Screenshots diff --git a/README.zh-Hans.md b/README.zh-Hans.md index a68d88e6..a7213d7d 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -3,23 +3,24 @@ 捐赠 -[Galaxy.Store](https://galaxystore.samsung.com/detail/info.torapp.uweb) +[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5) +[Galaxy.Store](https://galaxy.store/uweb) 下载 [超微浏览器下载及使用技巧](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) -(镜像: [grebe](https://uweb.grebedoc.dev/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [frama](https://torappinfo.frama.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://uweb.codeberg.page/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [pgs](https://uweb-m.pgs.sh/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [statichost](https://torappinfo-uweb.statichost.eu) [maozi](https://uweb.maozi.io/zh/) [storm](https://uweb.stormkit.dev/zh/) [vercel](https://uweb.vercel.app/zh/) 专用镜像...) +(镜像: [atomgit](https://uweb.atomgit.net/uweb/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://jamesfengcao.codeberg.page/zh/) [4everland](https://uweb.4everland.app/zh/) [cyclic](https://muweb.cyclic.app/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [deno](https://posh-crab-23.deno.dev/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [fleek](https://uweb.on-fleek.app/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [glitch](https://uweb.glitch.me/zh/) [zeabur](https://uweb.zeabur.app/zh/) [vercel](https://uweb.vercel.app/zh/) 专用镜像...) -- 提供20多deepseek满血版接入点。 -- 免魔法国内直接访问英文技术网站如wikipedia等 -- AI聊天可作为搜索引擎,对复杂问询提供多种[输入辅助](https://uwebzh.netlify.app/zh/input/index.html#);不受剪贴板长度限制,[超长文本自由传](https://uwebzh.netlify.app/zh/textprocess/index.html#) (AI输入或共享)。 +- 免魔法国内直接访问英文技术网站如google、百科等 +- AI聊天可作为搜索引擎来使用。 +- 完善的下载支持,部分网站下载其它浏览器无法成功。 - 微:不到250K。 - 威:无穷无尽的功能,使用增强后的html5可以实现任何本地应用功能。支持使用js脚本、url服务、shell命令、内部功能链接定制菜单/(新)按钮/手势; 远程数据皆可成网站。 -- 便捷:AI聊天/图书/txt/词典/命令行/APP/webapp可作为搜索引擎使用。 +- 便捷:AI聊天/图书(pdf/djvu)/txt/词典(mdict,kiwix)/命令行/APP/webapp(web extensions)可作为搜索引擎使用。 - 快:手机越慢,脚本插件越多越明显。 - 高效:最少的操作,在线服务全自动(参看常用链接网页)。 - 极致优化:最少存储写操作,比如浏览器转到后台前配置变化如恢复成原样则无写操作。 - 地址栏支持命令行 ("!", 物理键盘支持更佳) -- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理,支持使用"siteextra/[domain.sanitizer]"对网页任意定制。 +- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理 - 支持用户定义域名属性。 - 下载资源在线播放/预览/预处理。 - 独立切换网站登录、配置文件。 @@ -34,7 +35,7 @@ ![](https://i.postimg.cc/0NFnQT6H/option2.png) #### 软件功能 -输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置(ua,禁用脚本,无图,激活脚本)、行编辑器、网络唤醒(Wake-on-LAN)。通过安装html5应用可预览/阅读本地或在线任意格式文件(pdf,djvu,epub,mdx/mdd,docx等)。 +输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置(ua,禁用脚本,无图,激活脚本)、行编辑器、代码编辑器(支持120多种语言,语法高亮、错误提示、自动提示、直接运行测试、其它网页上直接测试)。通过安装html5应用可预览/阅读本地或在线任意格式文件(pdf,djvu,epub,mdx/mdd,docx等)。 修仙小说里面有一种异能,叫做“成功可以复制”,只要成功一次,就能无限复制。超微浏览器中这种异能叫"超级书签"。成功使用时保存,需要时就可以无限恢复。 @@ -50,7 +51,7 @@ 支持自定义任意多个搜索引擎; 支持执行用户提供任何js文件; 支持用户定义任意多个useragent; 长按链接支持运行第三方程序; 长按链接支持运行用户js文件。 -安装定制版Termux然后再安装超微浏览器(顺序不能错),可用地址栏作图(类似matlab功能)、超级计算器(无限精度/π的前万位或更多、无限函数、无限常量)、符号演算(解方程、分解因式、求积分导数)、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码,才能真正发挥出uWeb的潜能。 +配套安装uWeb定制Termux应用,可用地址栏作图(类似matlab功能)、超级计算器(无限精度/π的前万位或更多、无限函数、无限常量)、符号演算(解方程、分解因式、求积分导数)、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码,才能真正发挥出uWeb的潜能。 #### Ebrowser for Windows, MacOS and Linux 可看作超微浏览器台式机简易版,用于弥补普通浏览器访问痛点。 diff --git a/README.zh.md b/README.zh.md index a68d88e6..a7213d7d 100644 --- a/README.zh.md +++ b/README.zh.md @@ -3,23 +3,24 @@ 捐赠 -[Galaxy.Store](https://galaxystore.samsung.com/detail/info.torapp.uweb) +[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5) +[Galaxy.Store](https://galaxy.store/uweb) 下载 [超微浏览器下载及使用技巧](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) -(镜像: [grebe](https://uweb.grebedoc.dev/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [frama](https://torappinfo.frama.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://uweb.codeberg.page/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [pgs](https://uweb-m.pgs.sh/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [statichost](https://torappinfo-uweb.statichost.eu) [maozi](https://uweb.maozi.io/zh/) [storm](https://uweb.stormkit.dev/zh/) [vercel](https://uweb.vercel.app/zh/) 专用镜像...) +(镜像: [atomgit](https://uweb.atomgit.net/uweb/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://jamesfengcao.codeberg.page/zh/) [4everland](https://uweb.4everland.app/zh/) [cyclic](https://muweb.cyclic.app/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [deno](https://posh-crab-23.deno.dev/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [fleek](https://uweb.on-fleek.app/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [glitch](https://uweb.glitch.me/zh/) [zeabur](https://uweb.zeabur.app/zh/) [vercel](https://uweb.vercel.app/zh/) 专用镜像...) -- 提供20多deepseek满血版接入点。 -- 免魔法国内直接访问英文技术网站如wikipedia等 -- AI聊天可作为搜索引擎,对复杂问询提供多种[输入辅助](https://uwebzh.netlify.app/zh/input/index.html#);不受剪贴板长度限制,[超长文本自由传](https://uwebzh.netlify.app/zh/textprocess/index.html#) (AI输入或共享)。 +- 免魔法国内直接访问英文技术网站如google、百科等 +- AI聊天可作为搜索引擎来使用。 +- 完善的下载支持,部分网站下载其它浏览器无法成功。 - 微:不到250K。 - 威:无穷无尽的功能,使用增强后的html5可以实现任何本地应用功能。支持使用js脚本、url服务、shell命令、内部功能链接定制菜单/(新)按钮/手势; 远程数据皆可成网站。 -- 便捷:AI聊天/图书/txt/词典/命令行/APP/webapp可作为搜索引擎使用。 +- 便捷:AI聊天/图书(pdf/djvu)/txt/词典(mdict,kiwix)/命令行/APP/webapp(web extensions)可作为搜索引擎使用。 - 快:手机越慢,脚本插件越多越明显。 - 高效:最少的操作,在线服务全自动(参看常用链接网页)。 - 极致优化:最少存储写操作,比如浏览器转到后台前配置变化如恢复成原样则无写操作。 - 地址栏支持命令行 ("!", 物理键盘支持更佳) -- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理,支持使用"siteextra/[domain.sanitizer]"对网页任意定制。 +- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理 - 支持用户定义域名属性。 - 下载资源在线播放/预览/预处理。 - 独立切换网站登录、配置文件。 @@ -34,7 +35,7 @@ ![](https://i.postimg.cc/0NFnQT6H/option2.png) #### 软件功能 -输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置(ua,禁用脚本,无图,激活脚本)、行编辑器、网络唤醒(Wake-on-LAN)。通过安装html5应用可预览/阅读本地或在线任意格式文件(pdf,djvu,epub,mdx/mdd,docx等)。 +输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置(ua,禁用脚本,无图,激活脚本)、行编辑器、代码编辑器(支持120多种语言,语法高亮、错误提示、自动提示、直接运行测试、其它网页上直接测试)。通过安装html5应用可预览/阅读本地或在线任意格式文件(pdf,djvu,epub,mdx/mdd,docx等)。 修仙小说里面有一种异能,叫做“成功可以复制”,只要成功一次,就能无限复制。超微浏览器中这种异能叫"超级书签"。成功使用时保存,需要时就可以无限恢复。 @@ -50,7 +51,7 @@ 支持自定义任意多个搜索引擎; 支持执行用户提供任何js文件; 支持用户定义任意多个useragent; 长按链接支持运行第三方程序; 长按链接支持运行用户js文件。 -安装定制版Termux然后再安装超微浏览器(顺序不能错),可用地址栏作图(类似matlab功能)、超级计算器(无限精度/π的前万位或更多、无限函数、无限常量)、符号演算(解方程、分解因式、求积分导数)、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码,才能真正发挥出uWeb的潜能。 +配套安装uWeb定制Termux应用,可用地址栏作图(类似matlab功能)、超级计算器(无限精度/π的前万位或更多、无限函数、无限常量)、符号演算(解方程、分解因式、求积分导数)、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码,才能真正发挥出uWeb的潜能。 #### Ebrowser for Windows, MacOS and Linux 可看作超微浏览器台式机简易版,用于弥补普通浏览器访问痛点。 diff --git a/assets/help_en.html b/assets/help_en.html index eff6bbed..0a5213bd 100644 --- a/assets/help_en.html +++ b/assets/help_en.html @@ -1,30 +1,27 @@ -Manual +Manual
Manual 中文
Frequently visited links::
-Settings & tips ( -netlify +Updates, plugins and tips ( github gitlab -grebe -frama +4everland repo -gitee -bitbucket +bitbucket vercel +netlify pages -codeberg +codeberg surge render + More... )

-Check for updates
+Check for updates
UI configuration(gitee)
-Advanced customization
+Advanced customization

App folder
@@ -33,11 +30,11 @@ Super bookmarks
Download sdcard Download
-Error log
+Error log

Use multiple engines::
-Type in main screen input or address bar, then click on any search engine on the top part of home screen.
+Type in main screen input or address bar, then click on any search engine.

Toolbar::
@@ -47,27 +44,27 @@ Swipe down at top or swipe at any bottom corner to show.
  • <- : long press for auto page turning
  • -> : long press for app menu.
  • [⚙️]Settings: long press for options.
  • -
  • [□] tab showment; long press for global css, show "css/".
  • +
  • [□] tab management; long press for global css.
  • [🏠]Home screen: long press for new tab.
  • -
  • [☰] more tools; long pressed to configure global javascripts, show "js/".
  • +
  • [☰] more tools; long pressed to configure global javascripts.
  • More tools::
    @@ -78,7 +75,7 @@ Long press "settings" button to configure options. Need hosts file default.hosts.
  • Activate user script: when activated, the script will be run on similiar sites, until another script is activated or app exits.
  • -
  • Run user scripts for sites.
  • +
  • Run user scripts for sites.
  • Resource sniffer: Show results when deselected. Use file types.sniff to sniff specified file types. Empty file to sniff all kinds.
  • @@ -86,24 +83,30 @@ Long press "settings" button to configure options. More mirrors::
    -gitea -sf -rocket -launch -frama +Test1 +Test2 +Test3 +Test4 +Test5 +Test6 +Test7 +Test8 +Test9 +Test10 +Test11 +Test12 -disroot -dab - -azure - -dags -gud +Test14 +Test15 +Test17 +dagshub +gitgud

    Project home
    + diff --git a/assets/help_zh.html b/assets/help_zh.html index 8b64386d..f01783fc 100644 --- a/assets/help_zh.html +++ b/assets/help_zh.html @@ -1,30 +1,27 @@ -使用攻略 +使用攻略
    使用攻略 English
    -设置及技巧 ( -grebe -frama +更新、插件、设置及技巧 ( gitlab repo -codeberg +codeberg surge github +4everland +cyclic +deno netlify kinsta +fleek render torapp -static -maozi -pgs -storm pages + ... )
    常用链接::
    -检测并下载最新版
    -界面配置及杂项(镜像)
    +检测并下载最新版
    +界面配置及杂项(gitee镜像)
    高级个性化定制
    内部目录 分类书签 @@ -33,11 +30,11 @@ 下载 sd卡下载目录
    空白便签
    -出错报告
    +出错报告

    主屏查询举例::
    -在主屏中间输入框或顶部地址栏内输入关键词,再点击上面搜索引擎“百度”。
    +在主屏中间输入框或顶部地址栏内输入“牛奶”,再点击上面“值得买”。

    提示:: @@ -54,30 +51,30 @@ 左/右下角滑动或顶部/地址栏下方下拉可显示。
    更多工具: 注:可通过关闭[JS]/[IMG]来屏蔽广告,这种屏蔽方式没有性能损失。
    @@ -92,7 +89,7 @@
  • 缓存优先:优先使用缓存内容,可在离线状态下访问已缓存网页。
  • 激活用户脚本:首次执行用户脚本后,访问同类网站时会自动执行此脚本,直至清空后台或另一脚本被激活。
  • -
  • 执行网站用户脚本
  • +
  • 执行网站用户脚本
  • 概览模式: 显示完整页面宽度,有时字体会比较小。
  • 离线资源: 使用用户自备数据代替网站内容。
  • 资源嗅探:取消选项时显示嗅探结果。可用types.sniff控制嗅探类型,空文件嗅探一切。
  • @@ -102,7 +99,7 @@ 功能选择:: 书签文件::
    @@ -122,50 +119,49 @@
  • 运行用户javascript: 长按底部工具条[JS]按钮则弹出菜单显示bookmarklet目录下所有js文件供用户挑选执行。
  • 用户代理(user agent)配置: default.uas。文件每行以回车结尾,格式为:
    [UA名]:[UA字符串]
  • -
  • 搜索引擎配置home5.search。文件每行以回车结尾,格式为:
    +
  • 搜索引擎配置home5.search。文件每行以回车结尾,格式为:
    [引擎名]:[引擎url]
  • 长按底部工具条[IMG]按钮弹出菜单显示default.urls中辅助功能,配置文件格式与搜索引擎完全相同,每行格式如下:
    [功能名]:[提供功能网址]
  • 更多镜像::
    -arch -pastebin -host -cnblogs -npm -cacher -dou -pdawiki -4d4y -xycq -txdx -unpkg -w8 -tngl -cf -wt -gitea +试验1 +2 -sf -rocket -launch -frama +4 +5 -dis -dab -azure -bb -jsdeliv -dags -gud -gitnet -tilde -cryto -antopie -chapril +6 +7 +8 + +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +gitly +gitnet +palemoon +tilde +dotclear +minetest +chapril +cryto +antopie + +zeabur bitbucket vercel

    项目主页
    + diff --git a/en/_posts/index.xml b/en/_posts/index.xml index 74ea67c4..d24d7c65 100644 --- a/en/_posts/index.xml +++ b/en/_posts/index.xml @@ -2,193 +2,179 @@ _Posts on uweb browser: unlimited power - https://jamesfengcao.gitlab.io/uweb/en/_posts/ + /en/_posts/ Recent content in _Posts on uweb browser: unlimited power Hugo en - Sat, 18 Apr 2026 16:45:02 +0800 - - - Html5 applications - https://jamesfengcao.gitlab.io/uweb/en/html5/ - Tue, 06 Jan 2026 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/html5/ - <h3 id="remotelocal-big-txthtmlmd-files-zstgzbr-compressed-optionally-as-search-engines-or-paged-reader">remote/local big txt/html/md files (.zst,.gz,.br compressed optionally) as search engines or paged reader</h3> <p><code>i:0/js/reader.html:[remote url]#s=%s</code><br> is the search engine url for remote/local file.</p> <p><code>i:0/js/reader.html:[remote url]</code><br> is the paged reader for big txt/html files.</p> <p>Users can add a menu item by visiting <a href="../urls/index.html#">url services</a> and clicking the <code>Reader</code> link. After the menu item is installed and uweb restarts, long pressing any big txt/html/md link --&gt; command --&gt; Reader would load the big file in paged reader, long pressing button &quot;-&gt;&quot; on bottom toolbar --&gt; add as search engine --&gt; change the last part of url from &quot;#p=1&quot; to &quot;#s=%s&quot; and save the engine.</p> - - - File manager - https://jamesfengcao.gitlab.io/uweb/en/filemanager/ - Fri, 05 Dec 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/filemanager/ - <p>Visiting file urls ending with &quot;/&quot; enters internal file manager.</p> <p>When the current tab is internal file manager, visiting file url for a file shows the content of the file, long pressing button &quot;🕔&quot; -&gt; Editor loads line-based editor for the file. If the file does not exist, saving creates a new file.</p> <p>Running any command with address bar with the format &quot;d::command line:&quot; to execute &quot;command line&quot; in the current folder of the internal file manager. Ex:<br> &quot;d::touch a.txt:&quot; to create a new file a.txt.<br> &quot;d::mkdir subdir:&quot; to create a new folder names &quot;subdir&quot;.<br> &quot;d::mv old new:&quot; to rename the file &quot;old&quot; to be &quot;new&quot;.</p> - - - Tips - https://jamesfengcao.gitlab.io/uweb/en/tips/ - Fri, 05 Dec 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/tips/ - <p><strong>Address bar autocompletion as input method when starting with space</strong><br> When address bar text starts with space, the autocompletion selection is inserted to the focused element on the web page. It could be used to choose AI prompts.</p> <p><strong>Text processing for clipboard data</strong><br> On home screen, pressing the sharing button of the bottom toolbar popups the <a href="../textprocess/index.html#">text processing menu</a> for clipboard data.</p> <p><strong>To show web pages in desktop mode</strong><br> PC button + option &quot;wide viewport&quot; + global js &quot;force page resizable&quot;.<br> If some dialog is wider than the screen, press &quot;📄&quot; on the bottom toolbar.</p> - - - Phrases and input method - https://jamesfengcao.gitlab.io/uweb/en/input/ - Tue, 28 Oct 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/input/ - <h4 id="defaultinput">&quot;default.input&quot;</h4> <p>Click the following links to install menus popped by long pressing the share button (with arrow-out-of-square as icon) on the bottom toolbar:<br> <a href="i:0gdefault.input::@AddrBar%0A">Address Bar</a><br> <a href="i:0gdefault.input::%20\n%0A">New line</a><br> <a href="i:0gdefault.input::@^Z@%1A%0A">CTRL-Z: undo</a><br> <a href="i:0gdefault.input::@^Y@%19%0A">CTRL-Y: redo</a></p> <p>Long pressing the share button in <a href="../index.html#">uweb browser</a> will popup menus defined in file &quot;default.input&quot;, each line of which defines common phrase for user inputs. If the phrase begins with &quot;@xxxx@&quot;, then &quot;xxxx&quot; part is the alias for the rest part of the string. Alias could be used for non-printable phrases.</p> - - - Context menu - https://jamesfengcao.gitlab.io/uweb/en/longclick/ - Sat, 01 Mar 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/longclick/ - <h4 id="the-command-submenus">The &quot;command&quot; submenus</h4> <ul> <li>File &quot;<a href="../links/index.html#">image.link</a>&quot;: defines &quot;command&quot; submenus of the context menu for images.</li> <li>File &quot;<a href="../links/index.html#">download.link</a>&quot;: &quot;command&quot; submenus for download options menu.</li> <li>File &quot;context.link&quot;: &quot;command&quot; submenus in all other cases.</li> </ul> <p>The &quot;command&quot; submenus can be toggled with <a href="i:61:../searchurl/func.html">UI options</a>. The &quot;command&quot; submenus are default ( service urls or image.link or download.link), links, commands or service urls (default.urls when both link and command options are ticked).</p> <h4 id="to-run-commands">To run commands</h4> <p>Each line of file &quot;<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>&quot; has the following format: (same as <a href="../cmds/index.html#">default.cmds</a>)<br> [Name]:[mimetype]:[command line]<br> in which [command line] can have <a href="../cmds/index.html#">&quot;%c&quot; (cookie), &quot;%u&quot; (current url), &quot;%t&quot; (title)</a> etc.</p> - - - CSS styles - https://jamesfengcao.gitlab.io/uweb/en/globalcss/ - Sun, 13 Oct 2024 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/globalcss/ - <p><a href="../index.html#">Uweb browser</a> loads all &quot;.css&quot; files under the folder &quot;css&quot; as global css. Click the following links to install global css files:</p> <p><a href="i:0hcss/clearfont.css:../../zh/searchurl/txt/clearfont.css">Clearing font settings</a></p> <p>The file &quot;night.css&quot; is used as night mode, click the following links to install one:<br> <a href="i:0hnight.css:../../zh/searchurl/txt/night.css">webview 81+ night mode</a><br> <a href="i:0hnight.css:../../zh/searchurl/txt/night_old.css">webview 80- night mode</a></p> <h4 id="earliest-loaded-global-js">Earliest loaded global js</h4> <p>The &quot;.js&quot; files under the folder &quot;css&quot; are loaded as earlier as possible on the page.</p> <p>Click the following links to install early loaded global js:<br> <a href="i:0hcss/nojscopy.js::document.addEventListener(%22copy%22,(e)=>{e.preventDefault()})">No webpage clipboard copy</a></p> - + Fri, 19 Jul 2024 10:06:21 +0800 + Text selection/processing - https://jamesfengcao.gitlab.io/uweb/en/textprocess/ + /en/textprocess/ Fri, 01 Dec 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/textprocess/ - <p>Click the following links to install menus for long pressing the button <code>link</code>:<br> <a href="i:0gdefault.select::Share:/uwebS:%0A">Share</a></p> <p><a href="i:0gdefault.select::Save as:/uwebA:printf i:50:;cat%0A">Save selection as</a>, also be used to create new file with bookmark path like &quot;../help_en.html&quot;.</p> <p><a href="i:0gdefault.select::Edit:/text/html:echo -n %22%3cmeta charset=utf-8%3e%3cbody contenteditable%3e%22;cat%0A">Edit</a></p> <p><a href="i:0gdefault.select::AddrBar:/uwebAddr:%0A">Copy text to address bar</a></p> <p><a href="i:0gdefault.select::notems:/uwebA:printf i:0/js/hash2textarea.js:https://note.ms/ric#;cat%0A">note.ms: cloud text sharing, please replace &quot;ric&quot; with your favorite ID</a></p> <p><a href="i:0gdefault.select::copyHtml:html/clip:%0A">Copy selected text with html format to clipboard</a></p> <p><a href="i:0gdefault.select::Home:/uweb:printf file://data/data/info.torapp.uweb/files/home5.search%5C location.href=%5C%22i:15;cat;printf %5C%22%0A">Search with home screen</a></p> <p><a href="i:0gdefault.select::google Translate:/uweb:printf 'https://translate.google.com/?sl=auto&tl=en&op=translate&text=';cat|tr ' ' '%2B'%0A">google Translate</a></p> + /en/textprocess/ + Click the following links to install menus for long pressing the button &quot;link&quot;: note.ms: cloud text sharing, please replace &quot;ric&quot; with your favorite ID Copy selected text with html format to clipboard Search with home screen google Translate bing translate deepL The file &quot;default.select&quot; defines text processing menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format: Links - https://jamesfengcao.gitlab.io/uweb/en/links/ + /en/links/ Sat, 28 Oct 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/links/ - <h4 id="context-menu">Context menu</h4> <p>The configuration file <code>image.link</code>, <code>download.link</code> and <code>context.link</code> define the default <code>command</code> submenu of the context menus when a url link is long pressed.</p> <h5 id="context-menu-for-images">Context menu for images</h5> <p>Click the following links to install <code>command</code> submenu for image's context menu:<br> <a href="i:0gimage.link::google:https://www.google.com/searchbyimage?image_url=%25u0A">google image</a></p> <p><a href="i:0gimage.link::tineye:https://tineye.com/search?url=%25u0A">tineye</a></p> <p><a href="i:0gimage.link::yandex:https://yandex.com/images/search?family=yes&rpt=imageview&url=%25u0A">yandex image</a></p> <h5 id="download-options-menu---command">Download options menu -&gt; <code>command</code></h5> <p>Click the following links to install <code>command</code> submenu for <b>download options menu</b>:<br> <a href="i:0gdownload.link::pager:i:0m/js/view.html:%25u#p=1%0A">huge txt pager</a></p> <p><a href="i:0gdownload.link::pager_2lnk:i:0m/js/view.html#/js/2lnk.js:%25u#p=1%0A">pager with urls converted to links</a></p> + /en/links/ + Click the following links to install menus popped by long pressing the bookmark button (with star as icon): Capture long screenshot (need long screenshot mode) Select All:CTRL-A/undo:CTRL-Z/Redo:CTRL-Y Extend site cookies to 10 years Clear site cookies VPN Switch configuration Wait for network msg Certificate info Backup to box.com Restore from box.com upload to box.com More webdav link menu items Web fullscreen Long pressing the bookmark button in uweb browser will popup menus defined in file &quot;default. - Cron - https://jamesfengcao.gitlab.io/uweb/en/tcron/ + cron + /en/tcron/ Wed, 25 Oct 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/tcron/ - <h4 id="crontab-with-enhanced-semantics">crontab (with enhanced semantics)</h4> <p>Some battery restrictions on android 13+ may disallow new instance of uweb browser by alarm events. Users can either keep uweb instance (no battery consumption) or remove the restriction for uweb.</p> <p>For performance, the file &quot;crontab&quot; uses single space as field separator. Letters are not suppored currently. So use &quot;1&quot; for &quot;January&quot; and 2 for &quot;Tuesday&quot; etc.</p> <p>The sixth field in crontab file could be in the format of <a href="../links/index.html#">internal links</a>. Specifically, &quot;c:&quot; to execute the following commands in termux and &quot;!&quot; to execute commands directly. If the sixth field is not in any of above formats, then the field will appear as the message of alarm clock.</p> + /en/tcron/ + crontab (with enhanced semantics) For performance, the file &quot;crontab&quot; uses single space as field separator. Letters are not suppored currently. So use &quot;1&quot; for &quot;January&quot; and 2 for &quot;Tuesday&quot; etc. The sixth field in crontab file could be in the format of internal links. Specifically, &quot;c:&quot; to execute the following commands in termux and &quot;!&quot; to execute commands directly. If the sixth field is not in any of above formats, then the field will appear as the message of alarm clock. Offline resources - https://jamesfengcao.gitlab.io/uweb/en/offlinecache/ + /en/offlinecache/ Tue, 11 Apr 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/offlinecache/ - <p>Offline resources locate in the folder &quot;sitecache&quot;. With the option &quot;use offline resources&quot; enabled, the corresponding files in &quot;sitecache/[domain name]/[full path including filename, the url path part]&quot; are loaded first before reaching the network.</p> <h4 id="serverless-local-sites">Serverless local sites</h4> <p><a href="i:01Extract webapp:i:0bsitecache/local/:">Click to install url service that extracts web apps to the folder &quot;sitecache/local/&quot;</a>: support web extensions (.crx for chrome &amp; .xpi for firefox).</p> <p>Any folder under &quot;sitecache&quot; can be visited as a local site. Urls with search queries can be dynamically processed by the js/wasm code in the local file.</p> + /en/offlinecache/ + Offline resources locate in the folder &quot;sitecache&quot;. With the option &quot;use offline resources&quot; enabled, the corresponding files in &quot;sitecache/[domain name]/[full path including filename, the url path part]&quot; are loaded first before reaching the network. Serverless local sites Click to install url service that extracts web apps to the folder &quot;sitecache/local/&quot;: support web extensions (.crx for chrome &amp; .xpi for firefox). Any folder under &quot;sitecache&quot; can be visited as a local site. Resource redirection - https://jamesfengcao.gitlab.io/uweb/en/redirect/ + /en/redirect/ Tue, 11 Apr 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/redirect/ - <p>⚠️<span style="color:red">Redirection forwards cookies</span> with the setting option &quot;Redirect cookies&quot; enabled, so use the option with care.</p> <h4 id="setting-options-url-redirection-vs-resource-redirection">Setting options: &quot;Url redirection&quot; vs. &quot;Resource redirection&quot;</h4> <p>&quot;Url redirection&quot; redirects the main/page url only while &quot;Resource redirection&quot; is for all urls in the page.</p> <h4 id="global-redirection">Global redirection</h4> <p><a href="i:60/data/data/info.torapp.uweb/files/config.html:https://codeberg.org/uweb/pages/raw/branch/master/en/searchurl/config.html">Global redirection</a> is enabled with the setting option &quot;Resource redirection&quot; or both &quot;Url redirection&quot; and &quot;Redirect cookies&quot;.</p> <p>When a valid global redirection url is set, the &quot;default.redirect&quot; has no effect, and any url resource is fetched with the new url by appending the original url to the global redirection url.</p> + /en/redirect/ + ⚠️Redirection forwards cookies with the setting option &quot;Redirect cookies&quot; enabled, so use the options with care. Setting options: &quot;Url redirection&quot; vs. &quot;Resource redirection&quot; &quot;Url redirection&quot; redirects the main/page url only while &quot;Resource redirection&quot; is for all urls in the page. Global redirection Global redirection is enabled with the setting option &quot;Resource redirection&quot; or both &quot;Url redirection&quot; and &quot;Redirect cookies&quot;. When a valid global redirection url is set, the &quot;default.redirect&quot; has no effect, and any url resource is fetched with the new url by appending the original url to the global redirection url. Hosts files - https://jamesfengcao.gitlab.io/uweb/en/adblock_domain/ + /en/adblock_domain/ Mon, 20 Mar 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/adblock_domain/ - <p>The enhanced hosts files &quot;hosts&quot; and &quot;default.hosts&quot; take effect with the setting option &quot;use hosts&quot;.</p> <h4 id="hosts">hosts</h4> <p>The <span style="color:red">enhanced</span> file <a href="file:///data/data/info.torapp.uweb/files/hosts">&quot;hosts&quot;</a> defines IP addresses/attributes for domains. Each line has the following format:<br> [[IP address][attributes]][single space][domain name]</p> <p>where &quot;[[IP address][attributes]]&quot; could be:</p> <ul> <li> <p>ipv4 address such as:<br> 172.67.157.211 torapp.eu.org</p> </li> <li> <p>ipv6 address, Ex.:<br> [2606:4700:3037::6815:8c3] torapp.eu.org</p> </li> <li> <p>empty, that would lift all server-imposed limitations. Ex.:<br> [single space]gitee.com</p> <p>which will make all git repositories on the domain visitable as websites with raw file access url.</p> + /en/adblock_domain/ + The enhanced hosts files &quot;hosts&quot; and &quot;default.hosts&quot; take effect with the setting option &quot;use hosts&quot;. hosts The enhanced file &quot;hosts&quot; defines IP addresses/attributes for domains. Each line has the following format: [[IP address][attributes]][single space][domain name] where &quot;[[IP address][attributes]]&quot; could be: ipv4 address such as: 172.67.157.211 torapp.eu.org ipv6 address, Ex.: [2606:4700:3037::6815:8c3] torapp.eu.org empty, that would lift all server-imposed limitations. Ex.: [single space]gitee.com which will make all git repositories on the domain visitable as websites with raw file access url. JS/CSS/HTML/preprocessing for domains - https://jamesfengcao.gitlab.io/uweb/en/sitejs/ + /en/sitejs/ Sat, 28 Jan 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/sitejs/ - <h3 id="javascript-load-when-page-completes-earliest-loaded-js-should-use-sitecss">Javascript (load when page completes, earliest loaded JS should use sitecss).</h3> <ul> <li>Need to be named as &quot;[domain root].js&quot;, such as &quot;yahoo.com.js&quot; or &quot;finance.yahoo.com.js&quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded.</li> <li>Script must be put under the folder &quot;sitejs&quot; or &quot;/data/data/info.torapp.uweb/files/sitejs&quot;. The later folder has the priority.</li> <li>Long press the button &quot;settings&quot;, check the option &quot;Run user scripts&quot;.</li> <li>Support 2/3-segment domains. If the length of the last 2-segments of domain is less than 7 (ex. &quot;com.pl&quot;), then it is treated as one segment.</li> </ul> <h3 id="css-style-and-earliest-loaded-js">CSS style and earliest loaded JS</h3> <ul> <li>Need to be named as &quot;[domain root].css&quot;, such as yahoo.com.css or finance.yahoo.com.css。</li> <li>Under folder &quot;sitecss&quot;.</li> <li>&quot;[domain root].js&quot; is loaded at the earliest time.</li> <li>Long press the button &quot;settings&quot;, check the option &quot;Apply user styles&quot;.</li> </ul> <p>If file &quot;default.css&quot; exists, the style will be applied to all sites not matching [domain root].css.</p> + /en/sitejs/ + Javascript (load when page completes, earliest loaded JS should use sitecss). Need to be named as &quot;[domain root].js&quot;, such as &quot;yahoo.com.js&quot; or &quot;finance.yahoo.com.js&quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &quot;sitejs&quot; or &quot;/data/data/info.torapp.uweb/files/sitejs&quot;. The later folder has the priority. Long press the button &quot;settings&quot;, check the option &quot;Run user scripts&quot;. Bookmarks - https://jamesfengcao.gitlab.io/uweb/en/bookmark/ + /en/bookmark/ Mon, 16 Jan 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/bookmark/ - <p>AI, chatgpt etc.</p> <ul> <li><a href="https://aistudio.google.com/app/prompts/new_chat">google</a></li> <li><a href="https://gemini.google.com/app">google gemini</a></li> <li><a href="https://jeeves.ai/chat">jeeves</a></li> <li><a href="https://poe.com">poe</a></li> <li><a href="https://www.teach-anything.com/">teach-anything</a></li> <li><a href="https://magickpen.com/">magickpen</a></li> </ul> <p>Scholar:</p> <ul> <li><a href="https://lumina.sh">Lumina</a></li> </ul> <p><a href="https://note.ms">note.ms</a><br> <a href="https://rentry.org">rentry</a><br> <a href="i:1w">Wait for url from other devices</a><br> <a href="https://berify.com">berify: reverse image search for video</a></p> <h3 id="big-txthtmlmd-files"><a href="../html5/index.html#">Big txt/html/md files</a></h3> <p><a href="https://gutenberg.org/">gutenberg</a><br> Japanese <a href="https://www.aozora.gr.jp/">Aozora Bunko 青空文庫</a></p> <h3 id="associated-bookmarks">Associated bookmarks</h3> <p><a href="../searchcat/index.html#">Search engine files</a> associate with bookmarks with extension &quot;.html&quot;, which means the bookmark file if existing is appended to the page when the search engine file is on screen.</p> <p>&quot;help_en.html&quot; bookmark associates with the user manual in English. Similarly, &quot;help_zh.html&quot; is for Chinese manual. Whenever user manual is open, the associated bookmark appears before the manual.</p> + /en/bookmark/ + AI, chatgpt etc. google gemini jeeves morphic komo iaskAI poe freegpt teach-anything magickpen note.ms rentry Wait for url from other devices berify: reverse image search for video Associated bookmarks Search engine files associate with bookmarks with extension &quot;.html&quot;, which means the bookmark file if existing is appended to the page when the search engine file is on screen. &quot;help_en.html&quot; bookmark associates with the user manual in English. Similarly, &quot;help_zh.html&quot; is for Chinese manual. + + + Tips + /en/tips/ + Mon, 16 Jan 2023 00:00:00 +0000 + /en/tips/ + Text processing for clipboard data: On home screen, pressing the sharing button of the bottom toolbar popups the text processing menu for clipboard data. To show web pages in desktop mode: PC button + option &quot;wide viewport&quot; + global js &quot;force page resizable&quot;. Playing audio when screen off Option &quot;Floating video&quot; + video fullscreen playing Multiple home screens and Next/Prev page: home5.html, home6.mht(or .search or .html), home7.mht(or .search or .html), . Address bar command line - https://jamesfengcao.gitlab.io/uweb/en/acmd/ + /en/acmd/ Sun, 08 Jan 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/acmd/ - <h3 id="--or--command-line">&quot;:!&quot; ( or &quot;!&quot;) command line</h3> <p>Pressing &quot;:&quot; or &quot;!&quot; with hardware keyboard sets focus on the address bar.<br> The command line could be a &quot;.js&quot;, &quot;.sh&quot; or other executable with arguments. Ex. &quot;:!s g keyword&quot; could invoke &quot;s.js&quot; executable with the whole string as arguments (&quot;s.sh&quot; or &quot;s&quot; if file exists, here &quot;g&quot; as google search engine); &quot;:! g keyword&quot; would invoke the file &quot;.js&quot; or &quot;.sh&quot; as executable.</p> + /en/acmd/ + &quot;:!&quot; ( or &quot;!&quot;) command line Pressing &quot;:&quot; or &quot;!&quot; with hardware keyboard sets focus on the address bar. The command line could be a &quot;.js&quot;, &quot;.sh&quot; or other executable with arguments. Ex. &quot;:!s g keyword&quot; could invoke &quot;s.js&quot; executable with the whole string as arguments (&quot;s.sh&quot; or &quot;s&quot; if file exists, here &quot;g&quot; as google search engine); &quot;:! g keyword&quot; would invoke the file &quot;.js&quot; or &quot;.sh&quot; as executable. Any url as website - https://jamesfengcao.gitlab.io/uweb/en/url2site/ + /en/url2site/ Sun, 30 Oct 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/url2site/ - <p>The <a href="../index.html#">uweb</a> internal link &quot;<a href="../links/index.html">i:0m</a>&quot; make any url such as download or indirect links visitable as a website. The second part of <a href="../mirrors/index.html#">mirrors</a> has examples using the following tricks:</p> <ul> <li>&quot;i:0m04:[url]&quot;: to treat the [url] content as html with bookmarklet.</li> <li>&quot;i:0m?:[url]&quot;: to treat the [url] content as html, handling css/js properly.</li> <li>&quot;i:0m?[postfix]:[url]&quot;: auto append query postfix to url to retrieve content.</li> <li>&quot;i:0mi:5h:[url]&quot;: similar to &quot;i:0m?:[url]&quot;, to treat the [url] content as html (for download or no-script links etc.)</li> <li>&quot;i:0mi:5h?[postfix]::[url]&quot;: similar to &quot;i:0m?[postfix]:[url]&quot;. auto append query postfix to url to retrieve content.</li> <li>&quot;i:0mi:5h/[regex]/[replacement]::[url]&quot;: use the result of regular expression replacement to retrieve the content.</li> </ul> <p>For more complicated links such as cloud storage shared links, which need user gestures to reach temporary generated content link, use<br> &quot;i:0m/.../[local.html]:[url]&quot;, where the local file &quot;/.../[local.html]&quot; processes &quot;[url]&quot; as needed.</p> + /en/url2site/ + The uweb internal link &quot;i:0m&quot; make any url such as download or indirect links visitable as a website. The second part of mirrors has examples using the following tricks: &quot;i:0m04:[url]&quot;: to treat the [url] content as html with bookmarklet. &quot;i:0m?:[url]&quot;: to treat the [url] content as html, handling css/js properly. &quot;i:0m?[postfix]:[url]&quot;: auto append query postfix to url to retrieve content. &quot;i:0mi:5h:[url]&quot;: similar to &quot;i:0m?:[url]&quot;, to treat the [url] content as html (for download or no-script links etc. + + + Html5 applications + /en/html5/ + Sun, 02 Oct 2022 00:00:00 +0000 + /en/html5/ + This page is for uweb browser. Click to install the following html5 apps: Huge markdown file viewer Huge markdown+katex file viewer (Tex formulas) Huge markdeep file viewer (markdown, latex, diagram,graphviz etc.) plyr video player dplayer video player pdf viewer epub reader (author:llili) djvu viewer The corresponding menus can be installed with url services. Features The following mentioned subfolders locate in the configuration folder. The following html5 applications are allowed to read local files referred by &quot;https://local/sdcard/. Configuration folders/files - https://jamesfengcao.gitlab.io/uweb/en/filenames/ + /en/filenames/ Thu, 30 Jun 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/filenames/ - <p>All folders end with character &quot;/&quot; and others are files. All folders/files locate in &quot;/data/data/info.torapp.uweb/files&quot;:<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/css/">css/</a>&quot;: <a href="../globalcss/index.html#">global css folder</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/js/">js/</a>&quot;: <a href="../rjs/index.html#">global script folder</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitejs/">sitejs/</a>&quot;: <a href="../sitejs/index.html#">script folder for domains</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitecss/">sitecss/</a>&quot;:<a href="../sitejs/index.html#">CSS folder for domains</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/siteextra/">siteextra/</a>&quot;:<a href="../sitejs/index.html#">User extra folder for domains</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/bookmarklet/">bookmarklet/</a>&quot;:<a href="../rjs/index.html#">bookmarklets</a>, long pressing the &quot;JS&quot; button to execute.<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/offline/">offline/</a>&quot;: to save offline pages<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sbookmark/">sbookmark/</a>&quot;: to save super bookmarks<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitecache/">sitecache/</a>&quot;:<a href="../offlinecache/index.html#">offline cache</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/longclick/">longclick/</a>&quot;: menus to appear when long-pressing hypertext (js files)<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/icon/">icon/</a>&quot;:<a href="../icons/index.html#">customized icons</a><br> &quot;app[XXX]/&quot;:<a href="../html5/index.html#">html5 applications</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>&quot;: to configure menus when long-pressing hypertext.<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.uas">default.uas</a>&quot;:user agents<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.bml">default.bml</a>&quot;:<a href="../rjs/index.html#">bookmarklets</a>, long pressing the &quot;JS&quot; button to execute.<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.urls">default.urls</a>&quot;:<a href="../urls/index.html#">service urls</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.acmd">default.acmd</a>&quot;:configure address bar functionalities<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/hosts">hosts</a>&quot;: for local <a href="../adblock_domain/index.html#">domain name attributes</a>, only single space is allowed to separate ip address and domain name.<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.hosts">default.hosts</a>&quot;:<a href="../adblock/index.html#">hosts not allowed to visit</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.redirect">default.redirect</a>&quot;:<a href="../redirect/index.html#">redirect websites</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.cmds">default.cmds</a>&quot;:<a href="../cmds/index.html#">commands</a></p> + /en/filenames/ + All folders end with character &quot;/&quot; and others are files. All folders/files locate in &quot;/data/data/info.torapp.uweb/files&quot;: &quot;css/&quot;: global css folder &quot;js/&quot;: global script folder &quot;sitejs/&quot;: script folder for domains &quot;sitecss/&quot;:CSS folder for domains &quot;bookmarklet/&quot;:bookmarklets, long pressing the &quot;JS&quot; button to execute. &quot;offline/&quot;: to save offline pages &quot;sbookmark/&quot;: to save super bookmarks &quot;sitecache/&quot;:offline cache &quot;longclick/&quot;: menus to appear when long-pressing hypertext (js files) &quot;icon/&quot;:customized icons &quot;app[XXX]/&quot;:html5 applications &quot;default.longclick&quot;: to configure menus when long-pressing hypertext. AD blocking - https://jamesfengcao.gitlab.io/uweb/en/adblock/ + /en/adblock/ Sat, 25 Jun 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/adblock/ - <ul> <li> <p><a href="../adblock_domain/index.html#">Host blocking</a>。</p> <ul> <li>Use <a href="../bookmarklet/index.html#">bookmarklet &quot;list all script urls&quot;</a> to generate url links, long pressing dubious script (usually 3rd-party library) link, click &quot;Block domain root&quot;.</li> </ul> </li> <li> <p><a href="../sitejs/index.html#">Javascript and CSS for domains</a>。</p> <ul> <li>Long press the button &quot;js&quot;, click the menu &quot;MarkAD mode&quot;. In &quot;markAD mode&quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &quot;display:none&quot; is used. If &quot;display&quot; appears in the attribute information, recommend to use &quot;transform:scale(0)!important&quot; instead.</li> </ul> </li> <li> <p>Long press the tab manager button, check &quot;Videos only&quot; for video sites and &quot;Images only&quot; for image sites. Other AD blocking options are &quot;Hide pseudo elements&quot; and &quot;Hide iframes&quot;.</p> + /en/adblock/ + Host blocking。 Use bookmarklet &quot;list all script urls&quot; to generate url links, long pressing dubious script (usually 3rd-party library) link, click &quot;Block domain root&quot;. Javascript and CSS for domains。 Long press the button &quot;js&quot;, click the menu &quot;MarkAD mode&quot;. In &quot;markAD mode&quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &quot;display:none&quot; is used. If &quot;display&quot; appears in the attribute information, recommend to use &quot;transform:scale(0)! Bookmarklets - https://jamesfengcao.gitlab.io/uweb/en/bookmarklet/ + /en/bookmarklet/ Fri, 24 Jun 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/bookmarklet/ - <p>With <a href="../index.html#">uweb browser</a>, long pressing any bookmarklet link, click &quot;Open in new tab&quot;, the bookmarklet will be run on the last other tab.</p> <p><a href="javascript:{let es=document.getElementsByTagName('script');let urls='';for(let i=0;i<es.length;i++){if(es[i].src)urls+=es[i].src+'<br>';}let w=window.open(''),s=w.document;s.write(urls);s.close();}">List all script urls</a></p> <p><a target="_self" href="javascript:alert(navigator.userAgent)">User agent</a><br> <a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.cookie))})()">Cookie</a><br> <a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.documentElement.innerHTML))})()">Source code</a><br> <a href="javascript:function%20gett(w){try{var%20lm=new%20Date(w.document.lastModified);if(lm>maxd)maxd=lm;for(var%20i=0;F=w.frames[i];i++){gett(F);}}catch(e){}}var%20now=new%20Date();var%20maxd=new%20Date(document.lastModified);gett(window);if(maxd.getTime()==0||now.toUTCString()==maxd.toUTCString()){alert('Page%20is%20dynamically%20generated,%20cannot%20determine%20date.');}else{alert('Page%20was%20last%20modified%20'+maxd.toLocaleString());}" class="bookmarklet" rel="nofollow">Last modified date</a></p> <p><a href="javascript:(function(){var script=document.createElement('script');script.src='//fastly.jsdelivr.net/npm/eruda';document.body.appendChild(script);script.onload=function(){eruda.init()}})()">Eruda: mobile console</a><br> <a href="javascript:window.open('https://api.qrserver.com/v1/create-qr-code/?size=150x150&data='%20+%20decodeURIComponent(location.href));void(0);">QR code generation</a></p> <p><a href="javascript:(function(){var x,i; x = document.forms; for (i = 0; i &lt; x.length; ++i) x[i].method=&quot;get&quot;; alert(&quot;Changed &quot; + x.length + &quot; forms to use the GET method. After submitting a form from this page, you should be able to bookmark the result.&quot;); })();">Use &quot;GET&quot; method for &quot;POST&quot;</a><br> <a href="javascript:(function(){var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==&quot;hidden&quot;){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C(&quot;div&quot;); label=C(&quot;label&quot;); A(div, label); A(label, D.createTextNode(e.name + &quot;: &quot;)); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C(&quot;input&quot;);/*for ie*/ ne.type=&quot;text&quot;; ne.value=e.value; A(label, ne); --j;}})()">Shows all form elements</a><br> <a href="javascript:(function(){var x,k,f,j;x=document.forms;for (k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j){f[j].disabled=false; f[j].readOnly=false;}}})()">Enables all form elements</a></p> + /en/bookmarklet/ + With uweb browser, long pressing any bookmarklet link, click &quot;Open in new tab&quot;, the bookmarklet will be run on the last other tab. List all script urls User agent Cookie Source code Last modified date Eruda: mobile console QR code generation Use &quot;GET&quot; method for &quot;POST&quot; Shows all form elements Enables all form elements Toggle checkboxes Check all checkboxes Uncheck all checkboxes Toggle all checkboxes in forms Enable selection Restore context menu + + + CSS styles + /en/globalcss/ + Sun, 03 Apr 2022 00:00:00 +0000 + /en/globalcss/ + Uweb browser loads all &quot;.css&quot; files under the folder &quot;css&quot; as global css. Click the following links to install global css files: Clearing font settings The file &quot;night.css&quot; is used as night mode, click the following links to install one: webview 81+ night mode webview 80- night mode Earliest loaded global js The &quot;.js&quot; files under the folder &quot;css&quot; are loaded as earlier as possible on the page. Toolbar customization - https://jamesfengcao.gitlab.io/uweb/en/icons/ + /en/icons/ Sun, 06 Feb 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/icons/ - <p>If subfolder &quot;icon&quot; exists, then files named as &quot;0&quot;,&quot;1&quot;,&quot;2&quot;...<br> are used for icons in the bottom toolbar. file &quot;0&quot; to replace the left arrow button, &quot;1&quot; for right arrow button, &quot;2&quot; for the setting button,&quot;3&quot; for the home screen button,...</p> <p>If a new button is defined (file name &quot;20&quot; exists), uweb also supports VectorDrawable with &quot;android compiled XML&quot; format. All icon files must be either all compiled VectorDrawables or common image formats.</p> + /en/icons/ + If subfolder &quot;icon&quot; exists, then files named as &quot;0&quot;,&quot;1&quot;,&quot;2&quot;... are used for icons in the bottom toolbar. file &quot;0&quot; to replace the left arrow button, &quot;1&quot; for right arrow button, &quot;2&quot; for the setting button,&quot;3&quot; for the home screen button,... If a new button is defined (file name &quot;20&quot; exists), uweb also supports VectorDrawable with &quot;android compiled XML&quot; format. All icon files must be either all compiled VectorDrawables or common image formats. Search engine files - https://jamesfengcao.gitlab.io/uweb/en/searchcat/ + /en/searchcat/ Mon, 10 Jan 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/searchcat/ - <p>Search engine file names have &quot;.search&quot; as postfix. When they are clicked, the associated bookmark files with postfix &quot;.search.html&quot; would be appended. Ex: the associated bookmark for &quot;foo.search&quot; is &quot;foo.search.html&quot;.</p> <p>Any &quot;.search&quot; file can be opened as search engine file, each line of which has one of the following formats:<br> [Engine name]:[url without '%s' inside]<br> [Engine name]:[url with '%s' as keyword]<br> [Engine name]:POST:[post params with '%s' as keyword]:[url]<br> [Engine name]:[Extra request headers]:[post params with '%s' as keyword]:[url]</p> + /en/searchcat/ + Search engine file names have &quot;.search&quot; as postfix. When they are clicked, the associated bookmark files with postfix &quot;.search.html&quot; would be appended. Ex: the associated bookmark for &quot;foo.search&quot; is &quot;foo.search.html&quot;. Any &quot;.search&quot; file can be opened as search engine file, each line of which has one of the following formats: [Engine name]:[url without '%s' inside] [Engine name]:[url with '%s' as keyword] [Engine name]:POST:[post params with '%s' as keyword]:[url] [Engine name]:[Extra request headers]:[post params with '%s' as keyword]:[url] Termux - https://jamesfengcao.gitlab.io/uweb/en/termux/ + /en/termux/ Sat, 01 Jan 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/termux/ - <p>Only the termux versions provided along with uweb browser can work seamlessly. For android 10+, please install termux before installing uweb browser. If uweb is already installed, users can uninstall it first, then install termux and reinstall uweb browser.</p> <h4 id="termux-bookmarks">Termux bookmarks</h4> <p>Long pressing the following links then either &quot;commands&quot;-&gt;&quot;<a href="../urls/index.html#">bookmark</a>&quot; to add bookmarks or &quot;open in new tab&quot; to execute.<br> <a href="c:bc -l">GNU bc (basic calculator)</a><br> <a href="c:bc -l *.bc">bc with all extensions</a></p> <h4 id="click-the-following-links-to-install-termux-configurations">Click the following links to install termux configurations:</h4> <p><a href="i:0h/data/data/com.termux/files/home/.bashrc:../../termux/bashrc">.bashrc</a></p> + /en/termux/ + Only the termux versions provided along with uweb browser can work seamlessly. For android 10+, please install termux before installing uweb browser. If uweb is already installed, users can uninstall it first, then install termux and reinstall uweb browser. Termux bookmarks Long pressing the following links then either &quot;commands&quot;-&gt;&quot;bookmark&quot; to add bookmarks or &quot;open in new tab&quot; to execute. GNU bc (basic calculator) bc with all extensions Click the following links to install termux configurations: . User agents - https://jamesfengcao.gitlab.io/uweb/en/useragents/ + /en/useragents/ Sat, 01 Jan 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/useragents/ - <p>Clicking the following links to add user agents with <a href="../index.html#">uweb browser</a> or <a href="../ebrowserreadme/index.html#">ebrowser</a>.<br> <a href="i:02EdgA:Mozilla/5.0 (Linux; Android 13; KB2000) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 EdgA/127.0.2610.80">Edge for android</a><br> <a href="i:02Edge:Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 Edg/127.0.2610.80">Edge for windows</a></p> + /en/useragents/ + Clicking the following links to add user agents with uweb browser or ebrowser. Edge for android Edge for windows + + + Long pressed link menu + /en/longclick/ + Fri, 06 Nov 2020 00:00:00 +0000 + /en/longclick/ + To run commands Each line of file &quot;default.longclick&quot; has the following format: (same as default.cmds) [Name]:[mimetype]:[command line] in which [command line] can have &quot;%c&quot; (cookie), &quot;%u&quot; (current url), &quot;%t&quot; (title) etc. To visit url and load javascript file All &quot;.js&quot; files under the folder &quot;longclick&quot; are part of the popup menu. These javascript files are in the following format: The very first line can begin with &quot;//&quot; followed by website url that can have &quot;%u&quot; (current url), &quot;%t&quot; (title) etc. Tools - https://jamesfengcao.gitlab.io/uweb/en/tools/ + /en/tools/ Sun, 06 Sep 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/tools/ - <p>This page is for <a href="../index.html#">uweb browser</a>.</p> <h4 id="install-tdict_local-search-with-local-indexes-and-remote-content"><a href="i:0bhttps://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/tdict_loc.tar.gz">install tdict_local (search with local indexes and remote content)</a></h4> <p>Click to install the following local indexes with corresponding search engines (for test only).<br> <a href="i:0hahd.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/ahd.tidx">install the indexes for &quot;American heritage dictionary (en-en&amp;zh with AHD/D.J./K.K. pronunciation)&quot;</a><br> <a href="i:00AHD:d:text/html:tdict_loc ahd \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/HxY9QT5cdp63ZPK/download?path=%2F&files=ahd.dict\':">Install AHD to home screen</a></p> <p><a href="i:0henja.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/enja.tidx">Indexes for &quot;研究社新編英和活用大辞典(English usage: en-en&amp;ja)&quot;</a><br> <a href="i:00enja:d:text/html:tdict_loc enja \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=enja.dict\':">Install &quot;English usage (en-en&amp;ja)&quot;</a></p> <p><a href="i:0hsoed.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/soed.tidx">Indexes for SOED6</a><br> <a href="i:00soed:d:text/html:tdict_loc soed \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=soed.dict\':">install SOED</a></p> <p>The following dictionaries work better with markdown processor.<br> <a href="i:0hmd.html:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/txt/mdme.html">Install markdown processor</a><br> <a href="i:0hmwi.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/mwi.tidx">Indexes for &quot;Merriam Webster International Unabridged&quot;</a><br> <a href="i:00mwi:d:text/html:tdict_loc mwi \'%s\'|loc2html text/html.md.html \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=mwi.dict\':">Install MWI</a></p> + /en/tools/ + This page is for uweb browser. install tdict_local (search with local indexes and remote content) Click to install the following local indexes with corresponding search engines (for test only). install the indexes for &quot;American heritage dictionary (en-en&amp;zh with AHD/D.J./K.K. pronunciation)&quot; Install AHD to home screen Indexes for &quot;研究社新編英和活用大辞典(English usage: en-en&amp;ja)&quot; Install &quot;English usage (en-en&amp;ja)&quot; Indexes for SOED6 install SOED The following dictionaries work better with markdown processor. Install markdown processor Custom file handling - https://jamesfengcao.gitlab.io/uweb/en/filecap/ + /en/filecap/ Mon, 24 Aug 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/filecap/ - <p>Long press the settings button, check the option &quot;custom file handling&quot; to enable the functionality.</p> <p>The custom file handling configuration file is &quot;default.filecap&quot;, each line of it has the format as follows:<br> [file extension]:[mimetype]:[command line]</p> <p>The &quot;[file extension]&quot; part can have at most two-segment of extensions such as &quot;txt.xz&quot;,&quot;html.gz&quot;.<br> &quot;[mimetype]&quot; indicates the type of &quot;[command line]&quot; output.<br> &quot;[command line]&quot; is same as the one in <a href="../cmds/index.html#">default.cmds</a>. The most often used replacements are:<br> %u (url), %U (urlencoded url), %c (cookie), %p (site password, curl format).</p> + /en/filecap/ + Long press the settings button, check the option &quot;custom file handling&quot; to enable the functionality. The custom file handling configuration file is &quot;default.filecap&quot;, each line of it has the format as follows: [file extension]:[mimetype]:[command line] The &quot;[file extension]&quot; part can have at most two-segment of extensions such as &quot;txt.xz&quot;,&quot;html.gz&quot;. &quot;[mimetype]&quot; indicates the type of &quot;[command line]&quot; output. &quot;[command line]&quot; is same as the one in default.cmds. The most often used replacements are: Gestures - https://jamesfengcao.gitlab.io/uweb/en/gesture/ + /en/gesture/ Thu, 18 Jun 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/en/gesture/ - <p>Swipe down from the top to show the address bar; swipe up to the top to hide the address bar. Swipe down to the bottom to hide the toolbar with option &quot;swipe to hide tools&quot;; swipe on the bottom corners to show the toolbar.</p> <p>Swipe left/right near the toolbar to switch window; fling left/right to switch to the last/first window.</p> <p>Swiping on the top part of content window (near the top address bar by default) triggers corresponding link in the file &quot;default.gesture&quot;, which has the same format as <a href="../links/index.html#">default.link</a>.</p> + /en/gesture/ + Swipe down from the top to show the address bar; swipe up to the top to hide the address bar. Swipe down to the bottom to hide the toolbar with option &quot;swipe to hide tools&quot;; swipe on the bottom corners to show the toolbar. Swipe left/right near the toolbar to switch window; fling left/right to switch to the last/first window. Swiping on the top part of content window (near the top address bar by default) triggers corresponding link in the file &quot;default. diff --git a/en/acmd/index.html b/en/acmd/index.html index bd0514f4..dee892f1 100644 --- a/en/acmd/index.html +++ b/en/acmd/index.html @@ -3,11 +3,10 @@ - Address bar command line - - -

    zread

    -

    Ebrowser: keyboard-friendly minimal suckless web browser

    +

    Ebrowser: keyboard-friendly minimal suckless web browser

    Ebrowser is designed with the philosophy of Android uweb browser (gitlab).

    -
    -

    Note: Usually electron apps are heavyweight as they use browsers for simple things. Ebrowser uses core chromium effectively and very lightweight.

    -
    -

    Installing (for Windows, MacOS and Linux)

    -

    Install with prebuilt binaries

    +

    Note: Usually electron apps are heavyweight as they use browsers for simple things. Ebrowser uses core chromium effectively and very lightweight. Recommend to install electron separately.

    +

    Installing (for Windows, MacOS and Linux)

    +
    Install with prebuilt binaries

    You can find prebuilt binaries here.

    - -

    Install ebrowser

    -

    Either download (Click the green Code button above the file list => Select Download ZIP) and unzip from

    -
    https://github.com/torappinfo/ebrowser
    -
    -

    OR download and unzip ebrowser package directly from any of npm mirror sites like npmmirror or with nodejs by

    -
    npm install ebrowser
    -
    -

    OR download/git clone files directly from any of mirror repositories and ebrowser is under the folder misc/ebrowser.

    -

    Install electron

    -

    Before you can run ebrowser, you need to install electron either with nodejs by

    +
    Install with nodejs
    npm install electron
    +npm install ebrowser
     
    -

    OR download and unzip electron binary directly from github or mirrors like npmmirror.

    -

    Run ebrowser

    +

    Run ebrowser

    electron ~/node_modules/ebrowser
     
    -

    OR

    -
    electron [the-path-of-folder-with-downloaded-ebrowser-files]
    -
    -

    Update app quickly without updating chromium

    -

    Pressing Alt to show the menu bar and choose Check for updates under Help. OR

    -

    Type :update in the address bar and press enter key to update.

    -

    Key shortcuts

    +

    Later on, you can run "npm install electron" to update electron/chromium or "npm install ebrowser" to update ebrowser independently.

    +
    Update app quickly without updating chromium
    +

    Pressing "Alt" to show the menu bar and choose "Check for updates" under "Help". OR

    +

    Type ":update" in the address bar and press "enter" key to update.

    +

    Mirror urls could be used like ":update https://uwebzh.netlify.app/misc/ebrowser". All the mirrors listed on uweb browser could be used. The update url needs to be changed accordingly to be the folder "misc/ebrowser" under the mirror site root url.

    +

    Key shortcuts

    -

    Address bar commands

    -

    Like any popular browser, the very first word in address bar if defined in search.json identifies a search engine. Moreover, the address bar serves as command line interface:

    +

    Address bar commands

    +

    Like any popular browser, the very first word in address bar if defined in "search.json" identifies a search engine. Moreover, the address bar serves as command line interface:

    -

    Commands in no-focus mode (this mode is similar to vi Normal mode)

    +

    Commands in no-focus mode (this mode is similar to vi Normal mode)

    Pressing "ESC" to enter no-focus mode if not sure.

    The other commands are defined in "mapkeys.json", which will map keys to address bar commands.

    -

    Configuration files

    +

    Configuration files

    -

    Javascript at three levels

    +

    Javascript at three levels

    -

    examples for ":js"/":bjs" commands

    +
    examples for ":js"/":bjs" commands
    :js bJS=true //allow external Javascript files for web pages
     :js bJS=false //disallow external Javascript files for web pages
     :bjs bHistory=true //to record url history
     :bjs bQueryHistory=true //to record query/command history
     
    -

    New usages

    +

    New usages

    -

    License

    +

    License

    You can copy or modify the code/program under the terms of the GPL3.0 or later versions.

    -

    Last Modified: 22 April 2026
    -add back gitcode
    +

    Last Modified: 12 July 2024
    +reorg ebrowserreadme.md

    
     

    @@ -251,7 +224,7 @@ add back gitcode
    diff --git a/en/filecap/index.html b/en/filecap/index.html index 930db255..008a4f35 100644 --- a/en/filecap/index.html +++ b/en/filecap/index.html @@ -3,11 +3,10 @@ - Custom file handling - - - -
    - - - - - - - -
    -
    - -
    -

    File manager -
    - -

    - -

    Visiting file urls ending with "/" enters internal file manager.

    -

    When the current tab is internal file manager, visiting file url for a file shows the content of the file, long pressing button "🕔" -> Editor loads line-based editor for the file. If the file does not exist, saving creates a new file.

    -

    Running any command with address bar with the format "d::command line:" to execute "command line" in the current folder of the internal file manager. Ex:
    -"d::touch a.txt:" to create a new file a.txt.
    -"d::mkdir subdir:" to create a new folder names "subdir".
    -"d::mv old new:" to rename the file "old" to be "new".

    - -
    -

    Last Modified: 5 December 2025
    -add filemanager.md
    -

    
    -

    - - - - - - - - - diff --git a/en/filenames/index.html b/en/filenames/index.html index 4a0cac7f..c75c42be 100644 --- a/en/filenames/index.html +++ b/en/filenames/index.html @@ -3,11 +3,10 @@ - Configuration folders/files - - - -
    - - - - - - - -
    -
    - -
    -

    Phrases and input method -
    - -

    - -

    "default.input"

    -

    Click the following links to install menus popped by long pressing the share button (with arrow-out-of-square as icon) on the bottom toolbar:
    -Address Bar
    -New line
    -CTRL-Z: undo
    -CTRL-Y: redo

    -

    Long pressing the share button in uweb browser will popup menus defined in file "default.input", each line of which defines common phrase for user inputs. If the phrase begins with "@xxxx@", then "xxxx" part is the alias for the rest part of the string. Alias could be used for non-printable phrases.

    -

    Long text can be kept as txt file

    -

    Click the following links to install menus displayed by long pressing the bookmark button (with star as icon):
    -Select utf8 text file as keyboard input

    -

    Address bar

    -
    Address bar autocompletion as input method when starting with space
    -

    "default.autoc" or other .autoc files when choosen are loaded for address bar autocompletion. If the address bar text starts with space, the selected text is treated as user input for focused element in the visible tab.

    -

    Click the following links to append AI prompts:
    -Fetch the data from above URLs

    -

    More AI prompts, you could put them in the file "default.autoc" or other .autoc files:

    -
    -
    Address bar as part of query
    -

    When the input in main home screen starts with "space+newline", the effective query is addressbar+input.

    -
    Address bar as IME
    -

    Action mode menu item "⌨️" for address bar selection makes the text user input for focused element in the visible tab.

    -

    Text processing commands or links can be installed as menus to process address bar text, thus makes address bar powerful IME.

    - -
    -

    Last Modified: 13 November 2025
    -update search engines
    -

    
    -

    - - - - - - - - - diff --git a/en/links/index.html b/en/links/index.html index 5441b762..307e6216 100644 --- a/en/links/index.html +++ b/en/links/index.html @@ -3,11 +3,10 @@ - Links -

    Uweb browser: minimal suckless web browser with unlimited power

    中文

    -

    Galaxy.Store
    +

    Amazon appstore
    +Galaxy.Store
    Downloads

    Uweb browser: downloads, plugins and tips
    -(Mirrors: grebe gitlab frama codeberg repo netlify surge kinsta bitbucket pages vercel render statichost maozi storm pgs More...)

    +(Mirrors: gitlab codeberg repo 4everland fleek cyclic netlify surge kinsta zeabur deno bitbucket pages vercel render glitch More...)

    Main features

    -

    Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup & restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, Wake-on-LAN, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.).

    +

    Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup & restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.).

    Screenshots

    -


    -
    -
    -
    -
    -

    -

    Ebrowser for Windows, MacOS and Linux

    +


    +
    +
    +
    +
    +

    +

    Ebrowser for Windows, MacOS and Linux

    Ebrowser is a simple version of uweb browser on the desktop.

    -

    Last Modified: 12 April 2026
    -fix url for en/searchurl/config.js
    +

    Last Modified: 24 June 2024
    +move ebrowser README together with package files

    
     

    @@ -128,7 +130,7 @@ fix url for en/searchurl/config.js
    diff --git a/en/redirect/index.html b/en/redirect/index.html index 821e4391..e875e16e 100644 --- a/en/redirect/index.html +++ b/en/redirect/index.html @@ -3,11 +3,10 @@ - Resource redirection - + + + + + + + + + + + diff --git a/en/searchurl/bingAI/css/DrawImg.css b/en/searchurl/bingAI/css/DrawImg.css new file mode 100644 index 00000000..e2a01d07 --- /dev/null +++ b/en/searchurl/bingAI/css/DrawImg.css @@ -0,0 +1,205 @@ +/* 头部分 */ +body { + font-family: "Segoe UI", Arial, "Microsoft Yahei", sans-serif; + font-size: 75%; +} + +#head { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 4rem; + display: flex; + align-items: center; + justify-content: space-between; + backdrop-filter: blur(10px); + background-color: #ffffff78; + z-index: 99; +} + +#head-img-div { + height: 100%; + display: flex; + justify-content: flex-start; + align-items: center; +} + +#head-img-div>img { + height: 100%; +} + +#head-img-div-h2-img>* { + margin: 0; +} + +#head-li-div { + display: flex; + flex-direction: row; + align-items: center; +} + +#head-li-div>li { + list-style: none; + margin-right: 1rem; + font-size: 1rem; +} + +#head-li-div>a { + display: inline-block; + list-style: none; + margin-right: 1rem; + font-size: 1rem; + color: inherit; + text-decoration: inherit; +} + +#head-li-div>a:hover{ + color: #ff8300; +} + +/* 背景*/ + +#background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + background: repeating-linear-gradient(359deg, rgb(182 196 255) 0%, rgb(207 225 255 / 78%) 100%); +} + +body.a #background, +body.a .ThemeColors { + transition: filter 1s; + filter: hue-rotate(10deg); +} + +body.b #background, +body.b .ThemeColors { + transition: filter 1s; + filter: hue-rotate(-15deg); +} + +body.c #background, +body.c .ThemeColors { + transition: filter 1s; + filter: hue-rotate(-40deg); +} + +#body{ + margin-top: 4rem; + overflow: hidden; +} + +#DrawDiv{ + background-color: #ffffff70; + min-height: 30rem; + max-width: 45rem; + margin: 1rem auto auto; + border-radius: 1.5rem; + overflow: hidden; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + align-items: stretch; +} +#inputDraw{ + resize: none; + background-color: #ffffff00; + flex: 1; + margin-left: 1rem; + height: 2rem; + font-size: 1rem; + border: none; + outline:none; + line-height: 2rem; +} +#DrawInputDiv{ + background-color: #ffffff; + margin-left: 1rem; + margin-right: 1rem; + margin-top: 1rem; + border-radius: 0.5rem; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: stretch; +} +#startDraw{ + background-color: #0e00ff36; + border-radius: 0 0.5rem 0.5rem 0; + display: flex; + padding: 0.5rem; + align-items: center; + cursor: pointer; + font-size: 1rem; +} +#startDraw:hover{ + background-color: rgba(14, 0, 255, 0.56); +} +#DrawInputDiv{ + border: 1px solid rgba(0, 0, 0, 0.21); +} +#DrawInputDiv:has(#inputDraw:focus-visible){ + border: 1px solid #0e00ff36; +} +#imgs{ + margin-top: 1rem; + background-color: #c2b4ff29; + flex: 1; + border: 0.2rem solid #ffffff70; + border-top: none; + border-radius: 0 0 1.5rem 1.5rem; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: stretch; + justify-content: space-around; + align-content: space-around; + color: #ff8300; + font-size: 1rem; + font-weight: bolder; +} +#imgs>img{ + width: 49%; + margin: 0.5%; + transition: all 0.5s; + cursor: pointer; +} + +#imgs>img:hover{ + transform:translate(-0.5%, -0.5%); +} + +@media screen and (max-width:500px) { + :root { + font-size: 3.5vmin; + } + #imgs>img{ + width: 99%; + } +} + +@media screen and (orientation:portrait) and (max-device-width:800px) and (max-device-height:1000px) { + :root { + font-size: 3.5vmin; + } + #imgs>img{ + width: 99%; + } +} + + + + + + + + + + + + + diff --git a/en/searchurl/bingAI/css/bing.css b/en/searchurl/bingAI/css/bing.css new file mode 100644 index 00000000..3aac6088 --- /dev/null +++ b/en/searchurl/bingAI/css/bing.css @@ -0,0 +1,582 @@ +/* 头部分 */ + +#head { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 4rem; + display: flex; + align-items: center; + justify-content: space-between; + backdrop-filter: blur(10px); + background-color: #ffffff78; + z-index: 99; +} + +#head-img-div { + height: 100%; + display: flex; + justify-content: flex-start; + align-items: center; +} + +#head-img-div>img { + height: 100%; +} + +#head-img-div-h2-img>* { + margin: 0; +} + +#head-li-div { + margin-right: 2rem; +} + + +/* 背景*/ + +#background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + background: repeating-linear-gradient(359deg, rgb(182 196 255) 0%, rgb(207 225 255 / 78%) 100%); + transition: filter 1s; +} + +#background.a { + filter: hue-rotate(10deg); +} + +#background.b { + filter: hue-rotate(-5deg); +} + +#background.c { + filter: hue-rotate(-20deg); +} + + +/* 尾部分 */ + +#tail { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + height: 7rem; + display: flex; + justify-content: center; + backdrop-filter: blur(10px); + background-color: #ffffff78; + flex-direction: column-reverse; + align-items: center; + z-index: 99; +} + +#SearchSuggestions { + position: fixed; + top: -3rem; + display: flex; + flex-wrap: nowrap; + flex-direction: row; + justify-content: center; + align-items: center; + width: 100%; + transition: opacity 0.2s +} + +#SearchSuggestions>a { + backdrop-filter: blur(10px); + background-color: #ffffff82; + border-radius: 2rem; + padding: 0.5rem; + font-size: 0.9rem; + margin: 0.2rem; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + transition: flex 0.5s; +} + +#SearchSuggestions>a:hover { + cursor: pointer; + background-color: #ffffff; + flex: none; +} + +#tail-in { + display: flex; + width: 80%; + align-items: center; + justify-content: center; + height: 80%; +} + + +#restart:hover , +#restartNewChat:hover +{ + background-color: #ffffff; + cursor: pointer; +} + +#restart , +#restartNewChat +{ + border: 0; + border-radius: 1.5rem; + background-color: #ffffff9e; + height: 100%; + font-size: 0.8rem; + transition: all 0.5s; + overflow: hidden; + white-space: normal; +} + +#restart { + width: 0; + margin: 0; + padding: 0; + opacity: 0; +} + +body:has(.my) #restart { + width: 5rem; + margin-right: 0.5rem; + padding: 0; + opacity: 1; +} + +#restartNewChat{ + width: 5rem; + margin-right: 0.5rem; +} + +#restartNewChat.onShow{ + width: 0; + margin: 0; + padding: 0; + opacity: 0; +} + +#send { + border: 0; + margin: 0 1rem 1rem 0; + border-radius: 2rem; + background-color: #005fff38; + height: 1.8rem; + font-size: 0.8rem; + cursor: pointer; + min-width: 3rem; + transition: all 0.5s; +} + +#send:hover { + background-color: #005fff80; +} + +#input { + border: none; + resize: none; + outline: none; + width: 100%; + background-color: #ffffff00; + margin: 1rem 0 1rem 1rem; + height: -webkit-fill-available; +} + +#input:focus-visible { + border: 0; +} + +#input-div { + border-radius: 1.5rem; + flex: 1; + height: 100%; + background-color: #ffffff; + margin: 0 0; + display: flex; + flex-direction: row; + align-items: flex-end; + transition: all 0.5s; +} + + +/* 页面部分 */ +body { + overflow-x: hidden; +} + +#body-bottom { + height: 15rem; + width: 100%; +} + + +/* 聊天选项部分 */ + +#chatTypeDiv { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + flex-wrap: nowrap; + margin-bottom: 7rem; + transition: all 0.5s; +} + +#chatTypeDiv>.chatTypeChose { + background-color: #ffffffcc; + border-radius: 2rem; + width: 9rem; + height: 4rem; + margin: 1rem 0.3rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border: 0.5rem solid #ffffffcc; + cursor: pointer; +} + +#chatTypeDiv>.chatTypeChose>p { + margin: 0; + text-align: center; +} + +#chatTypeDiv>.chatTypeChose>h3 { + margin: 0; + text-align: center; +} + +#chatTypeChoseCreate.Chose { + background-color: #904887; + color: white; + cursor: default; +} + +#chatTypeChoseBalance.Chose { + background-color: #2870EA; + color: white; + cursor: default; +} + +#chatTypeChoseAccurate.Chose { + background-color: #006880; + color: white; + cursor: default; +} + + +/* 聊天部分,在页面内 */ +@keyframes acceptMeaaage { + from { + margin-top: 1em; + margin-left: -4em; + opacity: 0; + } + + to {} +} + +@keyframes sendMeaaage { + from { + margin-top: 1em; + margin-right: -4em; + opacity: 0; + } + + to {} +} + +.bing, +.my { + margin-bottom: 2rem; +} + +.bing { + display: grid; + justify-items: start; +} + +.bing>* { + animation: acceptMeaaage 0.5s; +} + +.my>* { + animation: sendMeaaage 0.5s; +} + +.my { + text-align: right; + font-size: 1.3rem; +} + +.InternalSearchQuery, +.InternalLoaderMessage { + margin-left: 1rem; + font-size: 1rem; +} + +.InternalSearchQuery>p, +.InternalLoaderMessage>p { + margin: 0; + margin-bottom: 1rem; +} + +.adaptiveCardsFatherDIV, +.my>.bobo { + display: inline-block; + background-color: #ffffff; + border-radius: 1rem; + padding: 1rem 1rem; + max-width: 85vw; + margin-bottom: 1rem; + text-align: left; +} + +.adaptiveCardsFatherDIV .throttling { + text-align: end; + font-size: 0.4rem; + margin-top: 0.5rem; + margin-bottom: -0.8rem; + border-top: 1px solid #0000005c; +} + +.bing>.sourceAttributions { + font-size: 0.9rem; + max-width: 85vw; + margin: 0; + margin-bottom: 1rem; + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + background-color: #ffffff57; + border-radius: 2rem; + padding: 0.5rem; +} + +.bing:has(.sourceAttributions) .adaptiveCardsFatherDIV { + margin-bottom: 1em; +} + + +.bing>.sourceAttributions>a { + display: inline-block; + background-color: #ffffff73; + border-radius: 1rem; + padding: 0.5rem; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin: 0.1rem; + color: #000000; + text-decoration: none; + transition: flex 0.5s; +} + +.bing>.sourceAttributions>a:hover { + background-color: #ffffffb3; + flex: none; +} + + +/* 上标 */ + +#chat .superscript { + display: inline-block; + vertical-align: super; + border: 0.1rem solid #0969da; + border-radius: 1em; + min-width: 1em; + text-align: center; + line-height: 1em; + font-size: small; + color: #0969da; +} + +#chat .superscript:hover { + background-color: #00000024; +} + +/*暂时不知道如何解析的渲染卡片请求*/ +.RenderCardRequest { + border-radius: 1em; + background-color: white; + overflow: auto; + padding: 1em; + width: 85vw; + max-width: 1100px; +} + +.RenderCardRequest>iframe { + min-width: 768px; + width: 100%; + height: 602px; + border: 0; +} + + + +/* 画图部分 */ + +.GenerateContentQuery { + background-color: #ffffff; + border-radius: 1rem; + max-width: 85%; + margin-bottom: 1rem; + text-align: center; + font-size: 1rem; + padding: 1rem; + overflow: hidden; + display: inline-table; +} + +.GenerateContentQuery>img { + max-width: 24%; + margin: 0.5%; + transition: all 0.8s; + cursor: pointer; +} + +.GenerateContentQuery>img:hover { + margin: 0.2% 0.8% 0.8% 0.2%; + box-shadow: #0000007a 2px 3px 5px 0px; + transition: all 0.3s; +} + + +/* 错误部分 */ + +#chat .error { + text-align: center; + color: red; +} + +.NoPower { + text-align: center; + color: #ff6d00; + cursor: pointer; + margin: 1rem; + text-decoration: underline; +} + + +/* 用于适配不同设备 */ + + +/* pc */ + +:root { + font-size: 1rem; +} + +div.markdown-body { + font-size: 1rem; + overflow: auto; +} + + +/* 窄窗口 */ +@media screen and (max-width:550px) { + + #tail-in:has(#input:focus-visible) #restart, + #tail-in:has(#input:hover) #restart, + #tail-in:has(#input:focus-visible) #restartNewChat, + #tail-in:has(#input:hover) #restartNewChat { + width: 0; + margin: 0; + padding: 0; + opacity: 0; + } + + .GenerateContentQuery>img { + max-width: 49%; + width: 49%; + } + + #tail-in { + width: 90%; + } + + .bing>.sourceAttributions { + flex-wrap: wrap; + } +} + +/*手机 css*/ + +@media screen and (orientation:portrait) and (max-device-width:800px) and (max-device-height:1000px) { + .InternalSearchQuery, + .InternalLoaderMessage { + width: 90%; + } + + .InternalSearchQuery>p, + .InternalLoaderMessage>p { + font-size: 1rem; + } + + .bing>.sourceAttributions { + max-width: 88vw; + flex-wrap: wrap; + } + + .adaptiveCardsFatherDIV, + .my>.bobo { + max-width: 88vw; + } + + #tail-in { + width: 90%; + } + + #restart { + font-size: 1em; + } + + #input { + font-size: 1em; + } + + .GenerateContentQuery>img { + max-width: 49%; + width: 49%; + } + + #tail-in:has(#input:focus-visible) #restart, + #tail-in:has(#input:hover) #restart, + #tail-in:has(#input:focus-visible) #restartNewChat, + #tail-in:has(#input:hover) #restartNewChat { + width: 0; + margin: 0; + padding: 0; + opacity: 0; + } + + /* 聊天部分,在页面内 */ + @keyframes acceptMeaaage { + from { + margin-top: 1em; + margin-left: 0em; + opacity: 0; + } + + to {} + } + + @keyframes sendMeaaage { + from { + margin-top: 1em; + margin-right: 0em; + opacity: 0; + } + + to {} + } +} diff --git a/en/searchurl/bingAI/draw.html b/en/searchurl/bingAI/draw.html new file mode 100644 index 00000000..40e0bba3 --- /dev/null +++ b/en/searchurl/bingAI/draw.html @@ -0,0 +1,54 @@ + + + + Draw + + + + + +
    +
    + + +
    +
    + +
    +
    + + + diff --git a/en/searchurl/bingAI/js/GetSet.js b/en/searchurl/bingAI/js/GetSet.js new file mode 100644 index 00000000..e58f65a5 --- /dev/null +++ b/en/searchurl/bingAI/js/GetSet.js @@ -0,0 +1,42 @@ +async function setMagicUrl(url) { + localStorage.setItem('GoGoUrl',url); +} + +// ture:开启使用魔法聊天|false:关闭使用魔法聊天|'repeat':开启聊天复用 +async function setChatHubWithMagic(user) { + localStorage.setItem('ChatHubWithMagic',user); +} +// ture|false|'repeat' +async function getChatHubWithMagic() { + let v = localStorage.ChatHubWithMagic; + if (v) { + switch(v){ + case 0: + break; + case 1: + return false; + case 2: + return true; + } + } + return 'repeat'; +} + +//设置上次创建的聊天 +async function setLastChatJson(json) { + localStorage.setItem('LastChatJson',json); +} + +//获取上次创建的聊天 +async function getLastChatJson() { + return localStorage.LastChatJson; +} + +//获取上次聊天聊到的消息id次数 +async function getLastChatInvocationId(){ + return localStorage.LastChatInvocationId; +} +//设置上次聊天聊到的消息id次数 +async function setLastInvocationId(invocationId){ + return localStorage.setItem('LastChatInvocationId',invocationId); +} diff --git a/en/searchurl/bingAI/js/Write.js b/en/searchurl/bingAI/js/Write.js new file mode 100644 index 00000000..0befaaa3 --- /dev/null +++ b/en/searchurl/bingAI/js/Write.js @@ -0,0 +1,59 @@ +createChat(thisChatType).then((r) => { + if(r.ok) talk = r.obj; +}); + +/**重写重置聊天到初始状态函数 */ +function reSetStartChatMessage(type) { + chat.innerHTML = ``; + isSpeaking = false; +} + +/**重写函数 */ +function isSpeakingStart(chatWithMagic, sendText) { + isSpeaking = true; +} +//重写 +function isSpeakingFinish() { + isSpeaking = false; +} + + +//重写send函数 +oldSend = send; +send = (text) => { + reSetStartChatMessage(); + oldSend(text); +} + +//重写porserTextBlock函数 +/* +解析TextBlock body.type==TextBlock +*/ +function porserTextBlock(body, father) { + if (!body.size) { + let div = getByClass('textBlock', 'div', father, 'markdown-body'); + div.innerHTML = marked.marked(completeCodeBlock(body.text)); + renderMathInElement(div,renderMathInElementOptions); + let aaas = div.getElementsByTagName('a'); + //将超链接在新页面打开 + for(let i=0;i { + let text = input_text.value; + send(text); +}; diff --git a/en/searchurl/bingAI/js/bing.js b/en/searchurl/bingAI/js/bing.js new file mode 100644 index 00000000..ed369053 --- /dev/null +++ b/en/searchurl/bingAI/js/bing.js @@ -0,0 +1,294 @@ +var chat = document.getElementById('chat'); +var chatTypeDiv = document.getElementById('chatTypeDiv'); +var docTitle = document.getElementById('docTitle'); +var restart_button = document.getElementById('restart'); +var input_text = document.getElementById('input'); +var send_button = document.getElementById('send'); +let restartNewChat = document.getElementById('restartNewChat'); +var thisChatType = chatTypes.balance; + +//全局变量 +var talk; +var returnMessage; +var isSpeaking = false; + +reSetStartChatMessage(); + +//(string) +function addMyChat(message) { + let bobo = document.createElement('div'); + bobo.style.whiteSpace = 'pre-wrap'; + bobo.innerText = message; + bobo.classList.add('bobo'); + bobo.classList.add('markdown-body'); + let go = document.createElement('div'); + go.classList.add('my'); + go.appendChild(bobo); + chat.appendChild(go); +} + +//(string) +function addError(message) { + let go = document.createElement('div'); + go.classList.add('error'); + go.innerHTML = message; + chat.appendChild(go); +} + +let onMessageIsOKClose = false; +//(json) +function onMessage(json, returnMessage) { + if (json.type == "close") { + isSpeakingFinish(); + if (!onMessageIsOKClose) { + addError("聊天异常中断了!可能是网络问题。"); + } + return; + } + if (json.type == 'error') { + addError("连接发生错误:" + json.mess); + return; + } + onMessageIsOKClose = false + if (json.type == 3) { + onMessageIsOKClose = true; + returnMessage.getCatWebSocket().close(1000, 'ok'); + } else { + localStorage.removeItem('LastChatJson'); + if (json.type == 1) { + porserArguments(json.arguments); + } else if (json.type == 2) { + porserType2Item(json.item); + } else { + console.log(JSON.stringify(json)); + } + } +} + + +//页面逻辑 + + +//回车键发送 ctrl+回车换行 +input_text.addEventListener('keydown', (event) => { + if (event.key === 'Enter' && !event.altKey) { + event.preventDefault(); + //调用发送消息的函数 + send_button.onclick(); + } else if (event.key === 'Enter' && event.altKey) { + event.preventDefault(); + // 插入换行符 + input_text.value += "\n"; + } +}); + +/**重置聊天框和聊天建议到初始状态 */ +function reSetStartChatMessage(type) { + createChat(thisChatType).then((r) => { + if(r.ok) talk = r.obj; + }); + getChatHubWithMagic().then(async a => { + let t = 0; + if (a == 'repeat') { + t = await getLastChatInvocationId(); + } + chat.innerHTML = ` +
    +
    +
    +
    +
    + ${t} / 0 +
    +
    +
    + `; + }); +} + +/**正在创建聊天 */ +function isAskingToMagic() { + isSpeaking = true; + send_button.value = '施法中.'; +} + +/**bing正在回复 */ +function isSpeakingStart(chatWithMagic, sendText) { + isSpeaking = true; + + if (sendText) { + docTitle.innerText = sendText; + } + send_button.value = '响应中.'; +} + +/**bing回复结束 */ +function isSpeakingFinish() { + isSpeaking = false; + send_button.value = 'submit'; +} + +function send(text) { + if (isSpeaking) { + return; + } + chatTypeDiv.style.opacity = 0; + addMyChat(text); + if (!talk) { + isAskingToMagic(); + createChat(thisChatType).then((r) => { + if (!r.ok) { + addError(r.message); + isSpeakingFinish(); + return; + } + talk = r.obj; + isSpeakingStart(); + r = talk.sendMessage(text, onMessage); + if (!r.ok) { + isSpeakingFinish(); + addError(r.message); + return; + } + returnMessage = r.obj; + isSpeakingStart(r.chatWithMagic, text); + }); + return; + } else { + isSpeakingStart(); + let r = talk.sendMessage(text, onMessage) + if (!r.ok) { + isSpeakingFinish(); + addError(r.message); + return; + } + returnMessage = r.obj; + isSpeakingStart(r.chatWithMagic, text); + } +} + +send_button.onclick = () => { + if (isSpeaking) { + return; + } + let text = input_text.value; + input_text.value = ''; + input_update_input_text_sstyle_show_update({ target: input_text }); + if (!text) { + alert('什么都没有输入呀!'); + return; + } + send(text); +}; + +restart_button.onclick = () => { + onMessageIsOKClose = true; + if (returnMessage) { + returnMessage.getCatWebSocket().close(1000, 'ok'); + returnMessage = undefined; + } + talk = undefined; + isSpeakingFinish(); + reSetStartChatMessage(); + chatTypeDiv.style.opacity = 1; +}; + + + +//滚动到底部显示收聊天建议 + +// 定义一个函数处理滚动事件 +function handleScroll() { + // 获取文档的高度和滚动距离 + var docHeight = document.body.scrollHeight; + var scrollPos = window.pageYOffset; + // 如果滚动到底部,显示元素,否则隐藏元素 +} +// 添加滚动事件监听器 +window.addEventListener("scroll", handleScroll); + + + + +//选择聊天类型,创造力,平衡,精准 +let backgroundDIV = document.getElementById('background'); +let chatTypeChoseCreate = document.getElementById('chatTypeChoseCreate'); +let chatTypeChoseBalance = document.getElementById('chatTypeChoseBalance'); +let chatTypeChoseAccurate = document.getElementById('chatTypeChoseAccurate'); +//默认平衡 +thisChatType = chatTypes.balance; +chatTypeChoseCreate.onclick = () => { + if (chatTypeDiv.style.opacity == 0) { + return; + } + chatTypeChoseCreate.classList.add('Chose'); + chatTypeChoseBalance.classList.remove('Chose'); + chatTypeChoseAccurate.classList.remove('Chose'); + thisChatType = chatTypes.create; + backgroundDIV.className = 'a'; + reSetStartChatMessage('create'); +} +chatTypeChoseBalance.onclick = () => { + if (chatTypeDiv.style.opacity == 0) { + return; + } + chatTypeChoseCreate.classList.remove('Chose'); + chatTypeChoseBalance.classList.add('Chose'); + chatTypeChoseAccurate.classList.remove('Chose'); + thisChatType = chatTypes.balance; + backgroundDIV.className = 'b'; + reSetStartChatMessage('balance'); +} +chatTypeChoseAccurate.onclick = () => { + if (chatTypeDiv.style.opacity == 0) { + return; + } + chatTypeChoseCreate.classList.remove('Chose'); + chatTypeChoseBalance.classList.remove('Chose'); + chatTypeChoseAccurate.classList.add('Chose'); + thisChatType = chatTypes.accurate; + backgroundDIV.className = 'c'; + reSetStartChatMessage('accurate'); +} + + +// "resourceTypes": [ +// "main_frame", +// "sub_frame", +// "stylesheet", +// "script", +// "image", +// "font", +// "object", +// "xmlhttprequest", +// "ping", +// "csp_report", +// "media", +// "websocket", +// "webtransport", +// "webbundle", +// "other" +// ] + + +//发送按钮出现逻辑 +function input_update_input_text_sstyle_show_update(v) { + if (v.target.value) { + send_button.style.opacity = 1; + } else { + send_button.style.opacity = 0; + } +} +input_text.addEventListener("input", input_update_input_text_sstyle_show_update); +input_update_input_text_sstyle_show_update({ target: input_text }); + + +//开始新聊天按钮逻辑,仅在聊天复用 +restartNewChat.onclick = async () => { + localStorage.removeItem('LastChatJson'); + await setLastInvocationId(1); + restart_button.onclick(); +} + + + diff --git a/en/searchurl/bingAI/js/bingChatHub.js b/en/searchurl/bingAI/js/bingChatHub.js new file mode 100644 index 00000000..94ca39a0 --- /dev/null +++ b/en/searchurl/bingAI/js/bingChatHub.js @@ -0,0 +1,266 @@ +var expUrl = new RegExp('^(https?://)([-a-zA-z0-9]+\\.)+([-a-zA-z0-9]+)+\\S*$'); +function getUuidNojian() { + return URL.createObjectURL(new Blob()).split('/')[3].replace(/-/g, ''); +} + +class SendMessageManager { + //(会话id,客户端id,签名id,是否是开始) + //(string,string,string,boolena) + constructor(conversationId, clientId, conversationSignature,invocationId) { + this.invocationId = invocationId==undefined?1:invocationId; + this.conversationId = conversationId; + this.clientId = clientId; + this.conversationSignature = conversationSignature; + this.optionsSets = chatTypes.balance; + } + + //chatTypes中的一种 + setChatType(chatType) { + this.optionsSets = chatType; + } + + //发送json数据 + sendJson(chatWebSocket, json) { + let go = JSON.stringify(json) + '\u001e'; + chatWebSocket.send(go); + console.log('发送', go) + } + //获取用于发送的握手数据 + //(WebSocket) + sendShakeHandsJson(chatWebSocket) { + this.sendJson(chatWebSocket, { + "protocol": "json", + "version": 1 + }); + } + //获取用于发送的聊天数据 + //(WebSocket,sreing) + async sendChatMessage(chatWebSocket, chat) { + let optionsSets = chatTypes[this.optionsSets]; + let json = { + "arguments": [{ + "source": source, + "optionsSets": optionsSets, + "allowedMessageTypes": allowedMessageTypes, + "sliceIds": sliceIds, + "verbosity": "verbose", + "traceId": getUuidNojian(), + "isStartOfSession": (this.invocationId <= 1) ? true : false, + "message": await generateMessages(this,chat), + "conversationSignature": this.conversationSignature, + "participant": { + "id": this.clientId + }, + "conversationId": this.conversationId, + "previousMessages": (this.invocationId <= 1) ? await getPreviousMessages() : undefined + }], + "invocationId": this.invocationId.toString(), + "target": "chat", + "type": 4 + }; + this.sendJson(chatWebSocket, json); + this.invocationId++; + } +} + + + + + +//处理返回消息的类 +class ReturnMessage { + //(WebSocket,function:可以不传) + constructor(catWebSocket, lisin) { + this.catWebSocket = catWebSocket; + this.onMessage = [(v) => { + //console.log(JSON.stringify(v)) + }]; + if ((typeof lisin) == 'function') { + this.regOnMessage(lisin); + } + catWebSocket.onmessage = (mess) => { + //console.log('收到', mess.data); + let sss = mess.data.split('\u001e'); + for (let i = 0; i < sss.length; i++) { + if (sss[i] == '') { + continue; + } + for (let j in this.onMessage) { + if ((typeof this.onMessage[j]) == 'function') { + try { + this.onMessage[j](JSON.parse(sss[i]), this); + } catch (e) { + console.warn(e) + } + } + } + } + } + catWebSocket.onclose = (mess) => { + for (let i in this.onMessage) { + if ((typeof this.onMessage[i]) == 'function') { + try { + this.onMessage[i]({ + type: 'close', + mess: '连接关闭' + }, this); + } catch (e) { + console.warn(e) + } + } + } + } + catWebSocket.onerror = (mess) => { + console.log(mess); + for (let i in this.onMessage) { + if ((typeof this.onMessage[i]) == 'function') { + try { + this.onMessage[i]({ + type: 'error', + mess: mess + }, this); + } catch (e) { + console.warn(e) + } + } + } + } + } + /* + 获取消息WebSocket + */ + getCatWebSocket() { + return this.catWebSocket; + } + /** + * 注册收到消息监听器 + */ + //(function(json,ReturnMessage)) + regOnMessage(theFun) { + this.onMessage[this.onMessage.length] = theFun; + } +} +//处理聊天的类 +class Chat { + //theChatType chatTypes变量中的其中一个 + //invocationId 可以不传 + //(string,ture|false|'repeat',string,string,string,theChatType,int|undefined) + constructor(magicUrl, chatWithMagic, charID, clientId, conversationSignature, theChatType,invocationId) { + this.magicUrl = magicUrl; + this.chatWithMagic = chatWithMagic; + this.sendMessageManager = new SendMessageManager(charID, clientId, conversationSignature,invocationId); + if (theChatType) { + this.sendMessageManager.setChatType(theChatType); + } + } + /** + * 返回 + { + ok:true|false, + message:显示消息, + obj:ReturnMessage对象 + } + 当ok等于false时,不返回ReturnMessage + * 参数 消息string,当收到消息的函数,当关闭时函数 + */ + //(string,function:可以不传) + sendMessage(message, onMessage) { + try { + //let restsrstUrl = 'wss://sydney.bing.com/sydney/ChatHub'; + //if (this.chatWithMagic==true) + let restsrstUrl = this.magicUrl.replace('http', 'ws')+"sydney/ChatHub"; + + let chatWebSocket = new WebSocket(restsrstUrl); + chatWebSocket.onopen = () => { + this.sendMessageManager.sendShakeHandsJson(chatWebSocket); + this.sendMessageManager.sendChatMessage(chatWebSocket, message); + } + return { + ok: true, + message: 'ok', + obj: new ReturnMessage(chatWebSocket, onMessage), + chatWithMagic: this.chatWithMagic==true?true:false + }; + } catch (e) { + console.warn(e) + return { + ok: false, + message: "发生错误,可能是网络连接错误:" + e.message + }; + } + } +} + +function URLTrue(url, thiePath) { + return url + thiePath; +} + +//获取newbing权限 +async function getPower() {} + +async function copyCookies(magicUrl) {} + +//创建一个新对话 +/** + 返回结构,如果ok等于false则无chat对象 + { + ok:true|false, + message:显示消息, + obj:Cat对象 + } + */ +async function createChat(theChatType) { + let chatWithMagic = await getChatHubWithMagic(); + let magicUrl = await getMagicUrl(); + let restartNewChat = document.getElementById('restartNewChat'); + + if(chatWithMagic=='repeat'){//如果是聊天复用 + restartNewChat.classList.remove('onShow'); + let resjson = await getLastChatJson(); + if(resjson){//如果没有上次聊天或上次聊天已经失效就不返回,继续走创建聊天流程 + let invocationId = await getLastChatInvocationId(); + if(!invocationId){ + invocationId = 1; + } + return { + ok: true, + message: 'ok', + obj: new Chat(magicUrl, chatWithMagic, resjson.conversationId, resjson.clientId, resjson.conversationSignature, theChatType,invocationId) + }; + } + } + + let mes; + do { + try { + let url = URLTrue(magicUrl,'turing/conversation/create'); + let res = await fetch(url); + if(!res.ok){ + if(res.headers.has('cf-mitigated')){ + let challengeUrl = `${magicUrl}/challenge?`+location.href; + location.href=challengeUrl; + return; + } + mes = `Error code: ${res.status} ${res.statusText}`; + break; + } + let resjson = await res.json(); + if (!resjson.result || resjson.result.value != 'Success') { + mes = resjson; + break; + } + //保存成功的聊天 + setLastChatJson(resjson); + return { + ok: true, + message: 'ok', + obj: new Chat(magicUrl, chatWithMagic, resjson.conversationId, resjson.clientId, resjson.conversationSignature, theChatType) + }; + } catch (e) {mes = e.message;} + }while(false); + + return { + ok: false, + message: mes + }; +} diff --git a/en/searchurl/bingAI/js/generateImages.js b/en/searchurl/bingAI/js/generateImages.js new file mode 100644 index 00000000..fbed9c41 --- /dev/null +++ b/en/searchurl/bingAI/js/generateImages.js @@ -0,0 +1,75 @@ + +const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) +/** + * @param text 生成图像的描述 + * @param requestId 请求id,如果不是对话生成图片可以为undefined + * @param countF 回调函数,获取当前是第几次请求。 + * @return [...{img:url,mImg:url}...] img:图片url mIng:缩略图url + * */ +async function generateImages(text,requestId,countF){ + let theUrls = new URLSearchParams(); + theUrls.append('re', '1'); + theUrls.append('showselective', '1'); + theUrls.append('sude', '1'); + theUrls.append('kseed', '7500'); + theUrls.append('SFX', '2'); + theUrls.append('q', text); + theUrls.append('iframeid', requestId); + let theUrl = magicUrl+`images/create?${theUrls.toString()}`; + let response = await fetch(theUrl, + {"sec-fetch-site": "same-origin", + "referer": "https://www.bing.com/search?q=bingAI"}); + let html = (await response.text()); + //let cookieID = response.headers.get('cookieID'); + + //如果返回的是有错误的页面 + let urr = new RegExp('class="gil_err_mt">([^<>]*)').exec(html); + if(urr && urr[1]){ + let error = `

    ${urr[1]}

    `; + urr = new RegExp('class="gil_err_sbt">(([^<>]*<(a|div)[^<>]*>[^<>]*[^<>]*)*)').exec(html); + if(urr && urr[1]){ + error = error+`

    ${urr[1]}

    `; + } + throw new Error(error); + } + + //如果没错误就匹配链接获取图片 + urr = new RegExp('"/(images/create/async/results/(\\S*))"').exec(html); + if(!urr || !urr[1]){ + console.log(html); + throw new Error("请求图片返回不正确的页面,无法加载图片。"); + } + let ur = urr[1]; + ur = ur.replaceAll('&','&'); + let imgPageHtmlUrl = magicUrl + `${ur}`; + let options = {"sec-fetch-site":"same-origin", "referer":"https://www.bing.com/images/create?partner=sydney&showselective=1&sude=1&kseed=7000"}; + for(let count = 1;count<=20;count++){ + if((!!countF)&&(typeof countF =='function')){ + countF(count); + } + await sleep(3000); + let imgPageHtml; + try{ + imgPageHtml = (await (await fetch(imgPageHtmlUrl,options)).text()); + }catch(e){ + console.error(e); + } + if(!imgPageHtml){ + continue; + } + //用正则找全部图片 + let allSrc = imgPageHtml.matchAll(/]*src="([^"]*)"[^<>]*>/g); + let imgs = []; + for(let src;!(src=allSrc.next()).done;){ + imgs[imgs.length] = { + img:src.value[1].split('?')[0], + mImg:src.value[1].replaceAll('&','&') + } + } + if(imgs.length>0){ + return imgs; + }else{ + throw new Error("服务器未正常返回图片!"); + } + } +} diff --git a/en/searchurl/bingAI/js/optionsSets.js b/en/searchurl/bingAI/js/optionsSets.js new file mode 100644 index 00000000..a767e7f7 --- /dev/null +++ b/en/searchurl/bingAI/js/optionsSets.js @@ -0,0 +1,183 @@ +//聊天选项 +let chatTypes = { + //更有创造力选项 + create: [ + "nlu_direct_response_filter", + "deepleo", + "disable_emoji_spoken_text", + "responsible_ai_policy_235", + "enablemm", + "h3imaginative", + "objopinion", + "eredirecturl", + "dv3sugg", + "autosave", + "clgalileo", + "gencontentv3", + "prompttrcp" + ], + //balance 平衡模式选项 + balance: [ + "nlu_direct_response_filter", + "deepleo", + "disable_emoji_spoken_text", + "responsible_ai_policy_235", + "enablemm", + "galileo", + "objopinion", + "eredirecturl", + "dv3sugg", + "autosave", + "saharagenconv5" + ], + //精准选项 + accurate: [ + "nlu_direct_response_filter", + "deepleo", + "disable_emoji_spoken_text", + "responsible_ai_policy_235", + "enablemm", + "h3precise", + "objopinion", + "eredirecturl", + "dv3sugg", + "autosave", + "clgalileo", + "gencontentv3", + "prompttrcp" + ] +} + +//消息来源 +let source = "cib"; + +//接收消息类型 +let allowedMessageTypes = [ + "ActionRequest", + "Chat", + "Context", + "InternalSearchQuery", + "InternalSearchResult", + "Disengaged", + "InternalLoaderMessage", + "Progress", + "RenderCardRequest", + "AdsQuery", + "SemanticSerp", + "GenerateContentQuery", + "SearchQuery" +] + +//切片id,也不知道是啥意思,反正官网的更新了 +let sliceIds = [ + "winmuid1tf", + "osbsdusgreccf", + "contansperf", + "mlchatpc2", + "winstmsg2tf", + "creatgoglt2", + "creatorv2t", + "norespwcf", + "0521dur5", + "dur5", + "517opinion", + "418dhlths0", + "525ptrcp", + "kcimgv2cf", + "kcimgatt", + "427startpms0" +] + + + + +//生成消息对象 +async function generateMessages(sendMessageManager/*消息管理器*/,chatMessageText/*要发送的消息文本*/){ + function timeString() { + var d = new Date(); + var year = d.getFullYear(); + var month = (d.getMonth() + 1).toString().padStart(2, "0"); + var date = d.getDate().toString().padStart(2, "0"); + var hour = d.getHours().toString().padStart(2, "0"); + var minute = d.getMinutes().toString().padStart(2, "0"); + var second = d.getSeconds().toString().padStart(2, "0"); + var offset = "+08:00"; // 你可以根据需要修改这个值 + var s = year + "-" + month + "-" + date + "T" + hour + ":" + minute + ":" + second + offset; + return s; + } + + if(!sendMessageManager.startTime){ + sendMessageManager.startTime = timeString(); + } + return { + "locale": "zh-CN", + "market": "zh-CN", + "region": "US", + "location": "lat:47.639557;long:-122.128159;re=1000m;", + "locationHints": [ + { + "Center": { + "Latitude": 30.474109798833613, + "Longitude": 114.39626256171093 + }, + "RegionType": 2, + "SourceType": 11 + }, + { + "country": "United States", + "state": "California", + "city": "Los Angeles", + "zipcode": "90060", + "timezoneoffset": -8, + "dma": 803, + "countryConfidence": 8, + "cityConfidence": 5, + "Center": { + "Latitude": 33.9757, + "Longitude": -118.2564 + }, + "RegionType": 2, + "SourceType": 1 + } + ], + "timestamp": sendMessageManager.startTime, + "author": "user", + "inputMethod": "Keyboard", + "text": chatMessageText, + "messageType": "Chat" + } + +} + +async function getPreviousMessages(){ + function getUuid() { + return URL.createObjectURL(new Blob()).split('/')[3]; + } + let pos = getStartProposes(); + return [{ + "text": getStartMessage(), + "author": "bot", + "adaptiveCards": [], + "suggestedResponses": [{ + "text": pos[0], + "contentOrigin": "DeepLeo", + "messageType": "Suggestion", + "messageId": getUuid(), + "offense": "Unknown" + }, { + "text": pos[1], + "contentOrigin": "DeepLeo", + "messageType": "Suggestion", + "messageId": getUuid(), + "offense": "Unknown" + }, { + "text": pos[2], + "contentOrigin": "DeepLeo", + "messageType": "Suggestion", + "messageId": getUuid(), + "offense": "Unknown" + }], + "messageId": getUuid(), + "messageType": "Chat" + }]; +} diff --git a/en/searchurl/bingAI/js/parserReturn.js b/en/searchurl/bingAI/js/parserReturn.js new file mode 100644 index 00000000..3dc18db2 --- /dev/null +++ b/en/searchurl/bingAI/js/parserReturn.js @@ -0,0 +1,418 @@ +/** +(id,元素的tag,父元素,创建时顺便添加的class:可以多个) +获取一个指定id的元素如果没用就在服元素创建这个元素 +*/ +function getByID(id, tag, father) { + let t = document.getElementById(id); + if (!t) { + t = document.createElement(tag); + t.id = id; + for (let i = 3; i < arguments.length; i++) { + if (arguments[i]) { + t.classList.add(arguments[i]); + } + } + father.appendChild(t); + } + return t; +} +function getByClass(className, tag, father) { + let t = father.getElementsByClassName(className)[0]; + if (!t) { + t = document.createElement(tag); + t.classList.add(className); + for (let i = 3; i < arguments.length; i++) { + if (arguments[i]) { + t.classList.add(arguments[i]); + } + } + father.appendChild(t); + } + return t; +} + +function test(test) { + porserArguments(test.arguments); +} + +var throttling = { + "maxNumUserMessagesInConversation": 0, + "numUserMessagesInConversation": 0 +}; + +//解析type2的item +function porserType2Item(item){ + let chatDiv = document.getElementById('chat'); + if(item.result){ + let result = item.result; + if(result.value=='Success'){ + + }else if (result.value == 'Throttled') { + addError(result.message); + addError('24消息请求数达到了限制!'); + }else{ + addError(result.message); + addError('发生未知错误!'); + } + } + if (item.throttling) { + throttling = item.throttling; + } + if (item.messages) { + let nextFather = getByID(item.requestId, 'div', chatDiv, 'bing'); + porserMessages(item.messages, nextFather); + } + +} +/** + * 解析arguments + * 解析聊天消息,将消息添加到页面 + * **/ +function porserArguments(argumentss) { + for (let i = 0; i < argumentss.length; i++) { + porserType2Item(argumentss[i]); + } +} + +/* +解析messages +*/ +function porserMessages(messages, father) { + for (let i = 0; i < messages.length; i++) { + let message = messages[i]; + if(message.author=='user'){ + continue;//不解析用户的消息 + } + + //解析adaptiveCards 也就是聊天消息部分 下面类型的都是带有adaptiveCards的 + if (!message.messageType && message.adaptiveCards) {//如果是正常的聊天 + let adaptiveCardsFatherDIV = getByID(message.messageId, 'div', father, 'adaptiveCardsFatherDIV'); + porserAdaptiveCards(message.adaptiveCards, adaptiveCardsFatherDIV); + + //解析sourceAttributions 也就是引用链接部分 + if (message.sourceAttributions) { + if (message.sourceAttributions.length > 0) { + let sourceAttributionsDIV = getByID(message.messageId + 'sourceAttributions', 'div', father, 'sourceAttributions'); + porserSourceAttributions(message.sourceAttributions, sourceAttributionsDIV); + } + } + //解析suggestedResponses 建议发送的消息,聊天建议 + if (message.suggestedResponses) { + porserSuggestedResponses(message.suggestedResponses); + } + + } else if (message.messageType == 'InternalSearchQuery') { //如果是收索消息 + let div = getByID(message.messageId, 'div', father, 'InternalSearchQuery'); + porserLineTextBlocks(message.text, div); + + } else if (message.messageType == 'InternalLoaderMessage') { //如果是加载消息 + let div = getByID(message.messageId, 'div', father, 'InternalLoaderMessage'); + porserLineTextBlocks(message.text, div); + + } else if (message.messageType == 'GenerateContentQuery') {//如果是生成内容查询 + let div = getByID(message.messageId, 'div', father, 'GenerateContentQuery'); + generateContentQuery(message, div); + + }else if (message.messageType == 'RenderCardRequest'){//渲染卡片请求,目前不知道有什么用 + renderCardRequest(message, father); + + }else if(message.messageType == 'Disengaged'){ + let div = getByID(message.messageId, 'div', chat, 'error'); + div.innerHTML = ` + ${message.hiddenText}
    聊天中断!试试开始新主题? + `; + + }else if(message.contentOrigin == 'TurnLimiter'){ + addError(message.text); + addError('聊天被限制了,试试开始新主题?'); + + } else { + console.log('发现一个另类message', JSON.stringify(message)); + } + + } +} + +/* +解析渲染卡片请求,暂时不知道如何解析这个请求,就先判断里面有没有内容吧!没有就不显示。 +*/ +function renderCardRequest(message,father){ + if(father[message.messageId+'renderCardRequest']){//防止解析多次 + return; + } + father[message.messageId+'renderCardRequest'] = true; + + let url = 'https://www.bing.com/search?' + let theUrls = new URLSearchParams(); + theUrls.append("showselans",1); + theUrls.append("q",message.text); + theUrls.append("iframeid",message.messageId); + let src = url+theUrls.toString(); + + fetch(src).then(async (ret)=>{ + let html = await ret.text(); + // b_poleContent pc设备 || b_ans b_imgans 移动设备 + if(html.indexOf('class="b_poleContent"')>=0 || html.indexOf('class="b_ans')>=0){ + let div = getByID(message.messageId, 'div', father, 'RenderCardRequest'); + div.innerHTML = ``; + } + }); +} + + +/* +解析generateContentQuery生成内容查询,目前是只有图片 +*/ +function generateContentQuery(message, father) { + if(message.contentType=="IMAGE"){ + if(father.runed){//防止生成多次 + return; + } + father.runed = true; + generateContentQueryImg(message, father); + }else{ + console.log('发现一个另类generateContentQuery', JSON.stringify(message)); + } +} + +/** + * 解析图片生成目前是只有图片 + */ +function generateContentQueryImg(message, father){ + getMagicUrl().then(async magicUrl => { + if (!magicUrl) { + addError("魔法链接不正确!无法加载图片"); + return; + } + if (!expUrl.test(magicUrl)) { + addError("魔法链接不正确!无法加载图片") + return; + } + let theUrls = new URLSearchParams(); + theUrls.append('re', '1'); + theUrls.append('showselective', '1'); + theUrls.append('sude', '1'); + theUrls.append('kseed', '7500'); + theUrls.append('SFX', '2'); + theUrls.append('q', message.text); + theUrls.append('iframeid', message.requestId); + let theUrl = URLTrue(magicUrl,"images/create?") + theUrls.toString(); + + try{ + father.innerHTML = `正在生成${message.text}的图片.`; + let html = (await (await fetch(theUrl)).text()); + + //如果有错误就输出错误 + let urr = new RegExp('class="gil_err_mt">([^<>]*)').exec(html); + if(urr && urr[1]){ + father.innerHTML = `

    ${urr[1]}

    ` + urr = new RegExp('class="gil_err_sbt">(([^<>]*<(a|div)[^<>]*>[^<>]*[^<>]*)*)').exec(html); + if(urr && urr[1]){ + father.innerHTML = father.innerHTML+`

    ${urr[1]}

    `; + } + return; + } + + //如果没错误就匹配链接获取图片 + urr = new RegExp('"/(images/create/async/results/(\\S*))"').exec(html); + if(!urr || !urr[1]){ + console.log(html); + addError("请求图片返回不正确的页面,无法加载图片。"); + return; + } + let ur = urr[1]; + ur = ur.replaceAll('&','&'); + let imgPageHtmlUrl = URLTrue(magicUrl,ur); + let count = 0; + let run = async ()=>{ + father.innerHTML = `正在生成${message.text}的图片.${count}`; + if(count>20){ + father.innerHTML = "请求图片超时!"; + return; + } + count++; + let imgPageHtml; + try{ + imgPageHtml = (await (await fetch(imgPageHtmlUrl)).text()); + }catch(e){ + console.error(e); + } + if(!imgPageHtml){ + setTimeout(run,3000); + return; + } + + father.innerHTML = ''; + let theUrls = new URLSearchParams(); + theUrls.append('createmessage',message.text); + let a = document.createElement("a"); + father.appendChild(a); + //用正则找全部图片 + let allSrc = imgPageHtml.matchAll(/]*src="([^"]*)"[^<>]*>/g); + let src = undefined; + let ok = false; + while(!(src=allSrc.next()).done){ + ok =true; + theUrls.append('imgs',src.value[1].split('?')[0]); + let img = document.createElement("img"); + img.src = src.value[1]; + a.appendChild(img); + } + if(ok){ + a.target = '_blank'; + a.href = '../GeneratePicture/img.html?'+theUrls.toString(); + }else{ + father.innerHTML = "服务器未正常返回图片!"; + } + } + setTimeout(run,3000); + + }catch(e){ + console.error(e); + addError("请求图片失败:"+e); + } + }); +} + +/* +解析adaptiveCards 聊天消息部分 +*/ +function porserAdaptiveCards(adaptiveCards, father) { + for (let i = 0; i < adaptiveCards.length; i++) { + let adaptiveCard = adaptiveCards[i]; + if (adaptiveCard.type == 'AdaptiveCard') { + porserbody(adaptiveCard.body, father); + } else { + console.log('发现一个不是AdaptiveCard的adaptiveCard', JSON.stringify(adaptiveCard)); + } + } + +} +/** +解析body adaptiveCards[].body这个部分 + */ +function porserbody(bodys, father) { + for (let i = 0; i < bodys.length; i++) { + let body = bodys[i]; + if (body.type == 'TextBlock') { + porserTextBlock(body, father); + }else { + console.log('发现一个不是TextBlock的body', JSON.stringify(body)); + } + } +} + + + +/** +补全代码块,如果文本中有~~~开头却没有~~~结束则在最后补一个~~~,防止内容生成时闪烁 +*/ +function completeCodeBlock(makerdown){ + let to = function(regA,regB,add,makerdown){ + let falst = true; + let arrs = makerdown.split('\n'); + for(let i=0;i<=arrs.length;i++){ + if(falst){ + if(regA.test(arrs[i])){ + falst = false; + } + }else{ + if(regB.test(arrs[i])){ + falst = true; + } + } + } + if(!falst){ + makerdown = makerdown+add; + } + return makerdown; + } + let out = to( + new RegExp('^~~~.*$'), + new RegExp('^~~~( *)$'), + '\n~~~', + to( + new RegExp('^```.*$'), + new RegExp('^```( *)$'), + '\n```', + makerdown + ) + ); + // console.log(out); + return out; +} + +renderMathInElementOptions ={ + delimiters: [ + {left: "$$", right: "$$", display: true}, + {left: '$', right: '$', display: false}, + {left: "\\(", right: "\\)", display: false}, + {left: "\\begin{equation}", right: "\\end{equation}", display: true}, + {left: "\\begin{align}", right: "\\end{align}", display: true}, + {left: "\\begin{alignat}", right: "\\end{alignat}", display: true}, + {left: "\\begin{gather}", right: "\\end{gather}", display: true}, + {left: "\\begin{CD}", right: "\\end{CD}", display: true}, + {left: "\\[", right: "\\]", display: true} + ], + throwOnError: false +} +/* +解析TextBlock body.type==TextBlock +*/ +function porserTextBlock(body, father) { + if (!body.size) { + let div = getByClass('textBlock', 'div', father, 'markdown-body'); + div.innerHTML = marked.marked(completeCodeBlock(body.text)); + renderMathInElement(div,renderMathInElementOptions); + let aaas = div.getElementsByTagName('a'); + //将超链接在新页面打开 + for(let i=0;i${inline}

    `; +} + +/*** +解析sourceAttributions 聊天消息引用链接部分 + */ +function porserSourceAttributions(sourceAttributions, father) { + let html = ''; + for (let i = 0; i < sourceAttributions.length; i++) { + let sourceAttribution = sourceAttributions[i]; + html = html + `${sourceAttribution.providerDisplayName}`; + } + father.innerHTML = html; +} +/*** +解析suggestedResponses 建议发送的消息,聊天建议 + */ +function porserSuggestedResponses(suggestedResponses) { + var searchSuggestions = document.getElementById('SearchSuggestions'); + searchSuggestions.innerHTML = ''; + for (let i = 0; i < suggestedResponses.length; i++) { + let a = document.createElement('a'); + a.innerHTML = suggestedResponses[i].text; + a.onclick = (event)=>{send(event.target.innerHTML);} + searchSuggestions.appendChild(a); + } +} diff --git a/en/searchurl/bingAI/js/w_optionsSets.js b/en/searchurl/bingAI/js/w_optionsSets.js new file mode 100644 index 00000000..b4412aab --- /dev/null +++ b/en/searchurl/bingAI/js/w_optionsSets.js @@ -0,0 +1,62 @@ +//聊天选项 +let chatTypes = { + //balance 平衡模式选项 + balance: [ + "nlu_direct_response_filter", + "deepleo", + "enable_debug_commands", + "disable_emoji_spoken_text", + "responsible_ai_policy_235", + "enablemm", + "soedgeca", + "max_turns_5", + ] +} + +//消息来源 +let source = "edge_coauthor_prod"; + +//接收消息类型 +let allowedMessageTypes = [ + "ActionRequest", + "Chat", + "Context", + "InternalSearchQuery", + "InternalSearchResult", + "Disengaged", + "InternalLoaderMessage", + "RenderCardRequest", + "AdsQuery", + "SemanticSerp", + "GenerateContentQuery", + "SearchQuery" +] + +//切片id,也不知道是啥意思,反正官网的更新了 +let sliceIds = [] + +let tone = 'professional'; +let length = 'short'; +let format = 'paragraph'; + + +//生成消息对象 +async function generateMessages(sendMessageManager/*消息管理器*/,chatMessageText/*要发送的消息文本*/){ + return { + "locale": "zh-CN", + "market": "zh-CN", + "region": "US", + "location": "lat:47.639557;long:-122.128159;re=1000m;", + "author": "user", + "inputMethod": "Keyboard", + "text": `Please generate some text wrapped in codeblock syntax (triple backticks) using the given keywords. Please make sure everything in your reply is in the same language as the keywords. Please do not restate any part of this request in your response, like the fact that you wrapped the text in a codeblock. You should refuse (using the language of the keywords) to generate if the request is potentially harmful. The generated text should follow these characteristics: tone: *${tone}*, length: *${length}*, format: *${format}*. The keywords are: \`${chatMessageText}\`.`, + "messageType": "Chat" + } + +} + +async function getPreviousMessages(){ + return undefined; +} + + diff --git a/en/searchurl/bingAI/test.html b/en/searchurl/bingAI/test.html new file mode 100644 index 00000000..31179378 --- /dev/null +++ b/en/searchurl/bingAI/test.html @@ -0,0 +1,14 @@ + diff --git a/en/searchurl/bingAI/write.html b/en/searchurl/bingAI/write.html new file mode 100644 index 00000000..a2b2f25b --- /dev/null +++ b/en/searchurl/bingAI/write.html @@ -0,0 +1,86 @@ + + + + + + + Write + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + diff --git a/en/searchurl/cloudflare/bing.js b/en/searchurl/cloudflare/bing.js new file mode 100644 index 00000000..a6132dcc --- /dev/null +++ b/en/searchurl/cloudflare/bing.js @@ -0,0 +1,119 @@ +const SYDNEY_ORIGIN = 'https://sydney.bing.com'; +const KEEP_REQ_HEADERS = [ + 'accept', + 'accept-encoding', + 'accept-language', + 'connection', + 'cookie', + 'upgrade', + 'user-agent', + 'sec-websocket-extensions', + 'sec-websocket-key', + 'sec-websocket-version', + 'x-request-id', + 'content-length', + 'content-type', + 'access-control-request-headers', + 'access-control-request-method', +]; +const IP_RANGE = [ + ['3.2.50.0', '3.5.31.255'], //192,000 + ['3.12.0.0', '3.23.255.255'], //786,432 + ['3.30.0.0', '3.33.34.255'], //205,568 + ['3.40.0.0', '3.63.255.255'], //1,572,864 + ['3.80.0.0', '3.95.255.255'], //1,048,576 + ['3.100.0.0', '3.103.255.255'], //262,144 + ['3.116.0.0', '3.119.255.255'], //262,144 + ['3.128.0.0', '3.247.255.255'], //7,864,320 +]; + +/** + * 随机整数 [min,max) + * @param {number} min + * @param {number} max + * @returns + */ +const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min)) + min; + +/** + * ip 转 int + * @param {string} ip + * @returns + */ +const ipToInt = (ip) => { + const ipArr = ip.split('.'); + let result = 0; + result += +ipArr[0] << 24; + result += +ipArr[1] << 16; + result += +ipArr[2] << 8; + result += +ipArr[3]; + return result; +}; + +/** + * int 转 ip + * @param {number} intIP + * @returns + */ +const intToIp = (intIP) => { + return `${(intIP >> 24) & 255}.${(intIP >> 16) & 255}.${(intIP >> 8) & 255}.${intIP & 255}`; +}; + +const getRandomIP = () => { + const randIndex = getRandomInt(0, IP_RANGE.length); + const startIp = IP_RANGE[randIndex][0]; + const endIp = IP_RANGE[randIndex][1]; + const startIPInt = ipToInt(startIp); + const endIPInt = ipToInt(endIp); + const randomInt = getRandomInt(startIPInt, endIPInt); + const randomIP = intToIp(randomInt); + return randomIP; +}; + +export default { + /** + * fetch + * @param {Request} request + * @param {*} env + * @param {*} ctx + * @returns + */ + async fetch(request, env, ctx) { + const currentUrl = new URL(request.url); + const targetUrl = new URL(SYDNEY_ORIGIN + currentUrl.pathname + currentUrl.search); + + const newHeaders = new Headers(); + request.headers.forEach((value, key) => { + // console.log(`old : ${key} : ${value}`); + if (KEEP_REQ_HEADERS.includes(key)) { + newHeaders.set(key, value); + } + }); + newHeaders.set('host', targetUrl.host); + newHeaders.set('origin', targetUrl.origin); + newHeaders.set('referer', 'https://www.bing.com/search?q=Bing+AI'); + const randIP = getRandomIP(); + // console.log('randIP : ', randIP); + newHeaders.set('X-Forwarded-For', randIP); + const oldUA = request.headers.get('user-agent'); + const isMobile = oldUA.includes('Mobile') || oldUA.includes('Android'); + if (isMobile) { + newHeaders.set( + 'user-agent', + 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.7 Mobile/15E148 Safari/605.1.15 BingSapphire/1.0.410427012' + ); + } else { + newHeaders.set('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35'); + } + + // newHeaders.forEach((value, key) => console.log(`${key} : ${value}`)); + const newReq = new Request(targetUrl, { + method: request.method, + headers: newHeaders, + body: request.body, + }); + // console.log('request url : ', newReq.url); + const res = await fetch(newReq); + return res; + }, +}; diff --git a/en/searchurl/cloudflare/redirect.js b/en/searchurl/cloudflare/redirect.js index ee31aab9..f54c2fe0 100644 --- a/en/searchurl/cloudflare/redirect.js +++ b/en/searchurl/cloudflare/redirect.js @@ -8,12 +8,12 @@ export default { } async function goUrl(request, url) { - const Url = new URL(url); - const newReq = new Request(Url, { - method: request.method, - headers: request.headers, - body: request.body, - redirect: 'follow' - }) - return await fetch(newReq); + let fp = { + method: request.method + }; + fp.headers = new Headers(request.headers); + for(var i = 2; i < arguments.length-1; i=i+2){ + fp.headers[arguments[i]] = arguments[i+1]; + } + return await fetch(url, fp); } diff --git a/en/searchurl/cloudflare/redirect2.js b/en/searchurl/cloudflare/redirect2.js deleted file mode 100644 index b25ee327..00000000 --- a/en/searchurl/cloudflare/redirect2.js +++ /dev/null @@ -1,21 +0,0 @@ -export default { - async fetch(req, _env) { - let url = req.url; - const Url = new URL(url); - let iSlash = url.indexOf('/',11); - let nUrl = url.substring(iSlash+1); - return await goUrl(req, nUrl); - } -} - -async function goUrl(request, url) { - const Url = new URL(url); - let headers = new Headers(request.headers); - headers.set("X-forwarded-for","104.28.5.161"); - const newReq = new Request(Url, { - method: request.method, - headers: headers, - body: request.body - }) - return await fetch(newReq); -} diff --git a/en/searchurl/config.js b/en/searchurl/config.js index 3f17bd05..8e5c62c9 100644 --- a/en/searchurl/config.js +++ b/en/searchurl/config.js @@ -1,4 +1,4 @@ -let labels = ["Global redirect url","Download path (with option 'Download to sdcard')","Default font","Cursive","Fantasy","Fixed","Sans-Serif","Serif"]; +let labels = ["Global redirect url","Download path (with option 'Download to sdcard')","Default font","Cursive","Fantasy","Fixed","Sans-Serif","Serif"]; let names = ["redirecturl","downloadpath","font","cursive","fantasy","fixed","sansserif","serif"]; let d=document; @@ -18,7 +18,7 @@ function save(){ let d=document;let f=d.forms[0]; let inputs = Array.from(f.querySelectorAll('input')).map(input => input.value); inputs.pop(); - inputs.push(' + diff --git a/en/searchurl/template/webdav.html b/en/searchurl/template/webdav.html index 8390b910..ee6ea8d2 100644 --- a/en/searchurl/template/webdav.html +++ b/en/searchurl/template/webdav.html @@ -1,29 +1,20 @@ - - + diff --git a/en/searchurl/val.town/redirect.js b/en/searchurl/val.town/redirect.js deleted file mode 100644 index 9b0c1fad..00000000 --- a/en/searchurl/val.town/redirect.js +++ /dev/null @@ -1,17 +0,0 @@ -export default async function httpHandler(req: Request): Response { - let url = req.url; - let iSlash = url.indexOf('/', 11); - let nUrl = url.substring(iSlash + 1); - return await goUrl(req, nUrl); -} - -async function goUrl(request, url) { - const Url = new URL(url); - const newReq = new Request(Url, { - method: request.method, - headers: request.headers, - body: request.body, - redirect: 'follow' - }); - return await fetch(newReq); -} diff --git a/en/sitejs/index.html b/en/sitejs/index.html index bc735701..05ab693a 100644 --- a/en/sitejs/index.html +++ b/en/sitejs/index.html @@ -3,11 +3,10 @@ - JS/CSS/HTML/preprocessing for domains - - + + + + /en/ + + + + + + diff --git a/latest.html b/latest.html index 51f2e53b..f7460b34 100644 --- a/latest.html +++ b/latest.html @@ -1,23 +1,12 @@ Release notes diff --git a/misc/ebrowser/README.md b/misc/ebrowser/README.md index 9e5ed693..18d084bd 100644 --- a/misc/ebrowser/README.md +++ b/misc/ebrowser/README.md @@ -1,57 +1,40 @@ - -[![zread](https://img.shields.io/badge/Ask_Zread-_.svg)](https://zread.ai/torappinfo/ebrowser) -# [Ebrowser](https://github.com/torappinfo/ebrowser): keyboard-friendly minimal suckless web browser +### [Ebrowser](https://github.com/torappinfo/ebrowser): keyboard-friendly minimal suckless web browser Ebrowser is designed with the philosophy of [Android uweb browser](https://github.com/torappinfo/uweb) ([gitlab](https://gitlab.com/jamesfengcao/uweb)). - lightweight (less than 20k bytes) without bundled electron. - much less memory footprint than edge/chrome browser and highly performant. - keyboard friendly with vim-style keymaps and command line support in address bar. - global redirection to bypass censorship. -- user CSS/JS at will. Ex. pressing `md` in no-focus mode to preview markdown file. +- user CSS/JS at will. Ex. pressing "md" in no-focus mode to preview markdown file. - global CSS/JS for all sites at will. - CSS/JS for domains, similar to [uweb](https://jamesfengcao.gitlab.io/uweb/en/sitejs/index.html), but use sitejs/[domain].js or sitecss/[domain].css, not [domain root].js/css. - customizable. -- dark theme support. -> Note: Usually electron apps are heavyweight as they use browsers for simple things. Ebrowser uses core chromium effectively and very lightweight. +Note: Usually electron apps are heavyweight as they use browsers for simple things. Ebrowser uses core chromium effectively and very lightweight. Recommend to install electron separately. -## Installing (for Windows, MacOS and Linux) -### Install with prebuilt binaries +#### Installing (for Windows, MacOS and Linux) +##### Install with prebuilt binaries You can find prebuilt binaries [here](https://github.com/torappinfo/ebrowser/releases). -### Install ebrowser and electron separatedly (Recommended) -#### Install ebrowser -Either download (Click the green `Code` button above the file list => Select `Download ZIP`) and unzip from - - https://github.com/torappinfo/ebrowser - -OR download and unzip ebrowser package directly from any of npm mirror sites like [npmmirror](https://npmmirror.com/package/ebrowser) or with nodejs by - - npm install ebrowser - -OR download/`git clone` files directly from any of [mirror repositories](https://gitlab.com/jamesfengcao/uweb/-/blob/master/en/mirrors.md) and ebrowser is under the folder `misc/ebrowser`. - -#### Install electron -Before you can run ebrowser, you need to install electron either with nodejs by +##### Install with nodejs npm install electron + npm install ebrowser -OR download and unzip electron binary directly from [github](https://github.com/electron/electron/releases) or mirrors like [npmmirror](https://registry.npmmirror.com/binary.html?path=electron). - -#### Run ebrowser +Run ebrowser electron ~/node_modules/ebrowser -OR +Later on, you can run "npm install electron" to update electron/chromium or "npm install ebrowser" to update ebrowser independently. - electron [the-path-of-folder-with-downloaded-ebrowser-files] +##### Update app quickly without updating chromium +Pressing "Alt" to show the menu bar and choose "Check for updates" under "Help". OR -### Update app quickly without updating chromium -Pressing `Alt` to show the menu bar and choose `Check for updates` under `Help`. OR +Type ":update" in the address bar and press "enter" key to update. -Type `:update` in the address bar and press `enter` key to update. +Mirror urls could be used like ":update https://uwebzh.netlify.app/misc/ebrowser". All the mirrors listed on [uweb browser](https://uwebzh.netlify.app/en/readme/index.html) could be used. The update url needs to be changed accordingly to be the folder "misc/ebrowser" under the mirror site root url. -## Key shortcuts +#### Key shortcuts - Alt: show menu - ALT+<-: go backward - ALT+->: go forward @@ -63,28 +46,27 @@ Type `:update` in the address bar and press `enter` key to update. - CTRL+TAB: switch to next tab - CTRL+SHIFT+TAB: switch to previous tab - CTRL+W: close Tab -- CTRL+SHIFT+R: enable global redirection (`gredirect.json`) +- CTRL+SHIFT+R: enable global redirection ("gredirect.json") - CTRL+R: disable global redirection - ESC: remove focus. similar to vi normal mode. - F1: Help - F5: page refresh/reload - F12: devtools -## Address bar commands -Like any popular browser, the very first word in address bar if defined in `search.json` identifies a search engine. Moreover, the address bar serves as command line interface: +#### Address bar commands +Like any popular browser, the very first word in address bar if defined in "search.json" identifies a search engine. Moreover, the address bar serves as command line interface: - "/" for find-in-page - ":" for address bar commands - - ac [bookmark/history path w/o ext] : load `.rec` file for autocomplete. + - ac [bookmark/history path w/o ext] : load ".rec" file for autocomplete. - b [bookmarkfilename w/o ext] : bookmark current page in file. - bjs : Browser-level JavaScript execution. - - bml [filename w/o extension] [arguments...]: load/execute the javascript file. + - bml [filename w/o extension]: load/execute the javascript file. - cert : allow invalid certificates w/o arguments, otherwise restore to default. - clear : the arguments could be - cache : clear cache - dns : clear dns cache - storage: clear site storage data. - {[options](https://www.electronjs.org/docs/latest/api/session#sescleardataoptions)} - - exit : exit browser - ext [extension path]: load unpacked Chrome extension. - gr [gredirect index]: global redirection with corresponding index. Use the first global redirection url if no argument. Disable global redirection with any index out of the range. - js [js code] : execute JS code at OS level. Note: "javascript:..." is special url and thus works in the current web page, while ":js ..." commands can do any OS operations. @@ -92,18 +74,15 @@ Like any popular browser, the very first word in address bar if defined in `sear - nr/ur for No/Use "redirect.json" for domain redirection. - np : no proxy. - up [proxyName] : use proxy. privous proxy or the first proxy in proxy.json w/o [proxyName]. ":up" command also disables global and domain redirections, which are not restored by ":np". - - sys [command line] : execute system commands with url as one of arguments, and replace "%cookie" with corresponding one. Ex. "curl" commands for uploading. - ua [useragentName] : set user agent for future tabs. default user agent w/o arguments. - update [filename] : update the app w/o argument, otherwise retrive the [filename] from remote. The filename could be any file on [mirror sites](https://jamesfengcao.gitlab.io/uweb/en/readme/index.html) (this repository is part of it). - pdf [filename w/o extension] {[options](https://www.electronjs.org/docs/latest/api/web-contents#contentsprinttopdfoptions)} : print to PDF file. All arguments are optional; empty option "{}" to capture long screenshot as vector graphics. - "!" address bar commands - - "!xx ..." evaluates "xx.js" with the whole text as arguments[0] at OS level. - - "!!xx ..." evaluates "xx.js" with the whole text as arguments[0] at browser level, which could manipulate address bar etc. + "!xx ..." evaluates "xx.js" with the whole text as arguments[0]. - i: internal urls, which will be consistent with [uweb](https://jamesfengcao.gitlab.io/uweb/en/links/index.html). - "i:0/js/xxx.js:[url]" loads the "[url]" with bookmarklet "js/xxx.js". - - "i:8d[url]" fo force downloading -## Commands in no-focus mode (this mode is similar to vi Normal mode) +#### Commands in no-focus mode (this mode is similar to vi Normal mode) Pressing "ESC" to enter no-focus mode if not sure. - ":" for address bar commands - "/" for find-in-page with address bar @@ -111,7 +90,7 @@ Pressing "ESC" to enter no-focus mode if not sure. The other commands are defined in "mapkeys.json", which will map keys to address bar commands. -## Configuration files +#### Configuration files - "config": lines of address bar commands. - "search.json": search engines as shortcut-queryUrl pairs, where "%s" would be replaced by search query. - "default.autoc": predefined strings for address bar auto completion. @@ -125,21 +104,21 @@ The other commands are defined in "mapkeys.json", which will map keys to address - "select.json": to define menus for text selections. The odd-indexed strings are address bar commands with "%s" as the text selection. - "download.json" : array of strings to define context menu and buttons for downloading dialog. The even-indexed strings are texts to show on the button. The odd-indexed strings are address bar commands with "%u" as the downloaded url. -## Javascript at three levels +#### Javascript at three levels - Web page: url like "javascript:" or bookmarklet command ":bml" runs in web page. - Browser (or renderer process) : - ":bjs" to execute the following js code at browser level. + - "!xx" evaluates "xx.js", which could manipulate address bar etc. - OS level (or main process) : ":js" to execute the following js code with all OS APIs available. - - "!xx" evaluates "xx.js" with arguments. -### examples for ":js"/":bjs" commands +##### examples for ":js"/":bjs" commands :js bJS=true //allow external Javascript files for web pages :js bJS=false //disallow external Javascript files for web pages :bjs bHistory=true //to record url history :bjs bQueryHistory=true //to record query/command history -## New usages +#### New usages - Vector designing with web tech to replace Adobe Illustrator/Inkscape. - Design with web tech. @@ -151,5 +130,5 @@ The other commands are defined in "mapkeys.json", which will map keys to address - Adjust window width and use addressbar command line ":Pdf {}" to export vector graphics. - Use imageMagick to convert to any other vector graphics format. -## License +#### License You can copy or modify the code/program under the terms of the GPL3.0 or later versions. \ No newline at end of file diff --git a/misc/ebrowser/index.html b/misc/ebrowser/index.html index 71cff917..6e130640 100644 --- a/misc/ebrowser/index.html +++ b/misc/ebrowser/index.html @@ -60,7 +60,6 @@ You should have received a copy of the GNU General Public License along with thi const fs = require('fs'); const path = require('path'); const readline = require('readline'); - const cssInvert = "html,img,video{filter:invert(1) hue-rotate(180deg) !important;}body{background:white !important;}img[src],input[type=image]{opacity:.9;}"; var iTab = 0; var tabs; var engines = {}; @@ -71,8 +70,6 @@ You should have received a copy of the GNU General Public License along with thi var historyFile = path.join(__dirname,'history.rec'); var bHistory = false; var bQueryHistory = false; - const currentHour = new Date().getHours(); - var bDarkTheme = (currentHour >= 17 || currentHour < 8); let sitecssP = path.join(__dirname,"sitecss"); let sitejsP = path.join(__dirname,"sitejs"); let gjsA = []; @@ -83,7 +80,7 @@ You should have received a copy of the GNU General Public License along with thi var autocMode = 0; //0 for substring, 1 for startsWith const BML_head = "(async ()=>{let d=document;async function _loadJs(u){var a=d.createElement('script');a.type='text/javascript';a.async=false;a.src=u;d.body.appendChild(a);await new Promise(resolve=>a.onload=resolve)}"; const BML_tail = "})()"; - const BML_md = BML_head + "await _loadJs('https://cdn.jsdelivr.net/npm/marked@15.0.6/marked.min.js');let b=d.body;b.innerHTML=marked.parse(b.textContent)})()"; + const BML_md = BML_head + "await _loadJs('https://cdn.jsdelivr.net/npm/marked@12.0.2/marked.min.js');let b=d.body;b.innerHTML=marked.parse(b.textContent)})()"; let lastKeys; let lastKeys_millis = 0; @@ -104,12 +101,17 @@ You should have received a copy of the GNU General Public License along with thi mapKeys = JSON.parse(jsonStr); }catch(e){} }); + appendAutoc_rec(path.join(__dirname,'default.autoc'),null); + appendAutoc_rec(path.join(__dirname,'bookmark.rec'),' '); function initSearchEngines(jsonStr){ try{ - engines=JSON.parse(jsonStr); - let match = jsonStr.match(/:"([^"]+)"/); - if(match) defaultSE=match[1]; + let val1st; + engines=JSON.parse(jsonStr, (key, value)=>{ + if(!val1st && !(/^\d+$/u.test(key))) val1st=value; + return value; + }); + if(val1st) defaultSE=val1st; }catch(e){} } function save(filePath, u8array){ @@ -125,18 +127,12 @@ You should have received a copy of the GNU General Public License along with thi tabs.children[iTab].printToPDF(options) .then(u8array=>save(filePath,u8array)); } - function showHtml(html){ - let js = "document.documentElement.innerHTML=`"+html+"`;"; - let t=tabs.children[iTab]; - t.dataset.jsonce=js; - t.src="about:blank"; - } - function bookmark(argrest){//b [filenamestem] :bookmark + function bookmark(args){//b [filenamestem] url title :bookmark let bmFileName = "bookmark.rec"; let tab = tabs.children[iTab]; let url = tab.getURL(); - if(argrest) - bmFileName = argrest+".rec"; + if(args.length>1) + bmFileName = args[1]+".rec"; let title = tab.getTitle(); let line = title + " " + url + "\n"; fs.appendFile(path.join(__dirname,bmFileName), line, (err)=>{}); @@ -157,13 +153,12 @@ You should have received a copy of the GNU General Public License along with thi async function loadCSSFile(tab,jsF){ try { let js = await fs.promises.readFile(jsF,'utf8'); - tab.insertCSS(js); + tab.insertCSS(css); }catch(e){} } function cbStartLoading(e){ - let tab = e.target; - if(bDarkTheme) tab.insertCSS(cssInvert); if(!bDomainCSS) return; + let tab = e.target; let domain; try{ domain = new URL(tab.getURL()).hostname; @@ -216,7 +211,7 @@ You should have received a copy of the GNU General Public License along with thi function initTab(tab){ tab.allowpopups = true; tab.addEventListener('did-finish-load',cbFinishLoad); - tab.addEventListener('dom-ready',cbStartLoading); + tab.addEventListener('did-start-loading',cbStartLoading); tab.addEventListener('will-navigate',cbNavigate); } function newTab(){ @@ -242,9 +237,7 @@ You should have received a copy of the GNU General Public License along with thi let nTabs = tabs.children.length; if(nTabs<2) return "";//no remain tab let tab = tabs.children[iTab]; - try { - closedUrls.push(tab.getURL()); - } catch(e){} + closedUrls.push(tab.getURL()); if(document.activeElement == tab) tab.blur(); tabs.removeChild(tab); nTabs--; @@ -277,13 +270,6 @@ You should have received a copy of the GNU General Public License along with thi lastVal = null; //trigger full search }catch(e){return;} } - async function loadAutoc(){ - await appendAutoc_rec(path.join(__dirname,'default.autoc'),null); - await appendAutoc_rec(path.join(__dirname,'bookmark.rec'),' '); - - let inp = document.forms[0].q; - autocomplete(inp,inp.nextElementSibling,autocStrArray); - } function keyPress(e){ var inputE = document.forms[0].q; if (e.altKey||e.metaKey) @@ -380,39 +366,29 @@ You should have received a copy of the GNU General Public License along with thi ipcRenderer.send("command",q); } function coloncommand_render(cmd){ - const delimiter = /\s+/; - let arg0; - let argrest = null; - const match = delimiter.exec(cmd); - if(match){ - const sIndex = match.index; - const eIndex = sIndex + match[0].length; - arg0 = cmd.substring(1,sIndex); - argrest = cmd.substring(eIndex); - }else - arg0 = cmd.substring(1); - switch(arg0){ + args = cmd.substring(1).split(/\s+/); + switch(args[0]){ case "ac": - autoc(argrest); + autoc(args); return; case "b": - bookmark(argrest); + bookmark(args); return; case "bjs": - eval(argrest); + eval(cmd.slice(5)); return; case "bml": - bangcommand(argrest,0); + bml(args); return; case "pdf": - savePdf(argrest); + savePdf(args); return; } } - function autoc(argrest){ - if(!argrest) return; - let fpath = path.join(__dirname,argrest); + function autoc(args){ + if(2!=args.length) return; + let fpath = path.join(__dirname,args[1]); let fname = fpath; let delimit = ' '; if (!fs.existsSync(fname)){ @@ -432,24 +408,18 @@ You should have received a copy of the GNU General Public License along with thi tabs.children[iTab].executeJavaScript(str,false); }); } - function savePdf(argrest){ + function savePdf(args){ let filename = "ebrowser.pdf"; let options = {}; - if(argrest){ - let c0 = argrest.charCodeAt(0); - let iOpts = 0; + if(10) { - filestem = argrest.substring(0,iS); - iOpts = iS+1; - }else - iOpts = argrest.length; - filename = filestem + ".pdf"; + filename = args[1] + ".pdf"; + i = 2; } - if(argrest.length>iOpts){//:Pdf [filename] {...} - if(iOpts+2==argrest.length){// '{}' + if(i==args.length-1){//:Pdf [filename] {...} + if(2==args[i].length){// '{}' let width = document.body.clientWidth/96; tabs.children[iTab].executeJavaScript("document.documentElement.scrollHeight", false).then((h)=>{ @@ -461,17 +431,17 @@ You should have received a copy of the GNU General Public License along with thi return; }else{ try { - options = JSON.parse(argrest.substring(iOpts)); + options = JSON.parse(args[i]); }catch(e){}; } } } print2PDF(filename,options); } - function bangcommand(q,offset){ - let iS = q.indexOf(' ',offset); + function bangcommand(q){ + let iS = q.indexOf(' ',1); if(iS<0) iS=q.length; - let fname = q.substring(offset,iS); + let fname = q.substring(1,iS); let fpath = path.join(__dirname,fname+'.js'); if (fs.existsSync(fpath)) { fs.readFile(fpath, 'utf8',(err, js)=>{ @@ -483,7 +453,7 @@ You should have received a copy of the GNU General Public License along with thi const postfix = "})(`"; const end ="`)"; const fjs = `${prefix}${js}${postfix}${q}${end}`; - tabs.children[iTab].executeJavaScript(fjs,false); + eval(fjs); }); } } @@ -497,10 +467,7 @@ You should have received a copy of the GNU General Public License along with thi let c1=q.charCodeAt(1); switch(c0){ case 33://"!" - if(33!=c1) - coloncommand(q); - else - bangcommand(q,2); + bangcommand(q); recQueryHistory(q); return; case 47://"/" @@ -543,7 +510,7 @@ You should have received a copy of the GNU General Public License along with thi break; } if(q.indexOf('.')>0){ - url = 'http://'+q; + url = 'https://'+q; break NOREC; } url = defaultSE.replace('%s',q); @@ -563,12 +530,11 @@ You should have received a copy of the GNU General Public License along with thi function internalLink(url){ let cmd = url.charCodeAt(2); let subcmd = url.charCodeAt(3); + let iColon = url.indexOf(':',5); + let name = decodeURIComponent(url.slice(4,iColon)); + let rurl = url.substring(iColon+1); switch(cmd){ case 48://'0' i:0 - { - let iColon = url.indexOf(':',5); - let name = decodeURIComponent(url.slice(4,iColon)); - let rurl = url.substring(iColon+1); switch(subcmd){ case 47://'/' i:0/ if(106===url.charCodeAt(4) && 115===url.charCodeAt(5) && 47===url.charCodeAt(6)){ @@ -616,68 +582,9 @@ You should have received a copy of the GNU General Public License along with thi jsonAppend(pname,125,str); } return; - case 85: {//i:0U - let sscmd = url.charCodeAt(4); - switch(sscmd){ - case 65: {//i:0UA - let iC = url.indexOf(':',5); - let ua = navigator.userAgent; - ua += ' '+url.substring(5,iC); - tabs.children[iTab].setUserAgent(ua); - handleQuery(url.substring(iC+1)); - } - return; - } - } - return; default: } } - return; - case 56: //i:8 - switch(subcmd){ - case 100: //i:8d[url] to download - tabs.children[iTab].downloadURL(url.substring(4)); - return; - } - return; - case 112: //i:p[url]#[querystring] for http POST - { - let iQ = url.indexOf('#',12); - let data; - let rurl; - let headers; - switch(subcmd){ - case 49: //i:p1 - { - if(iQ>4) { - rurl = url.substring(4,iQ); - data = [{ - type: 'rawData', - bytes: Buffer.from(url.substring(iQ+1)) - }]; - }else{ - rurl = url.substring(4); - data = []; - } - headers = 'Content-Type: application/x-www-form-urlencoded'; - break; - } - case 50: //i:p2[url]#[filePath] post request with local file - rurl = url.substring(4,iQ); - data = [{type: 'file', filePath:url.substring(iQ+1)}]; - headers = 'Content-Type: multipart/form-data'; - break; - default: - return; - } - tabs.children[iTab].loadURL(rurl,{postData:data,extraHeaders:headers}); - return; - } - case 113: //i:q for multiple queries - handleQueries(url.substring(3)); - return; - } } function handleQueries(cmds){ for(var cmd of cmds.split("\n")) @@ -846,12 +753,15 @@ function autocomplete(inp,container,arr) {
    - +
    diff --git a/misc/ebrowser/mapkeys.json b/misc/ebrowser/mapkeys.json index 030ef7d6..59529b45 100644 --- a/misc/ebrowser/mapkeys.json +++ b/misc/ebrowser/mapkeys.json @@ -2,10 +2,7 @@ "al":"javascript:/*comments:test*/alert('test')", "uj":":js bJS=true //Use javascript", "nj":":js bJS=false //No javascript", - "up":":up", - "np":":np", "uh":":bjs bHistory=bQueryHistory=true //record/Use history", "nh":":bjs bHistory=bQueryHistory=false //No history", - "md":":bjs tabJS(BML_md) //markdown preview", - "td":":bjs bDarkTheme = !bDarkTheme;if(bDarkTheme) tabs.children[iTab].insertCSS(cssInvert);else tabs.children[iTab].reload()" + "md":":bjs tabJS(BML_md) //markdown preview" } diff --git a/misc/ebrowser/package.json b/misc/ebrowser/package.json index 22803e8f..5ff3f202 100644 --- a/misc/ebrowser/package.json +++ b/misc/ebrowser/package.json @@ -1,4 +1,4 @@ -{"version":"1.0.72", +{"version":"1.0.59", "name": "ebrowser", "description": "The keyboard-friendly minimal suckless web browser", "main": "webview.js", @@ -8,9 +8,7 @@ "package.json", "README.md", "translate.*", - "js/*.js", - "search.json", - "mapkeys.json" + "js/*.js" ], "scripts": { "release": "electron-builder" diff --git a/misc/ebrowser/search.json b/misc/ebrowser/search.json index 4cd0c402..a323c99e 100644 --- a/misc/ebrowser/search.json +++ b/misc/ebrowser/search.json @@ -1,61 +1,29 @@ { - "b":"https://www4.bing.com/search?q=%s", - "xs":"https://www.xseari.com/search/?q=%s", - "md":"i:0/js/uweb2edit.js:https://www.miaoda.cn/?uweb=%s", - "n":"https://www.n.cn/chathome?q=%s", - "z":"https://chat.z.ai/?q=%s", - "ff":"http://frogfind.com/?q=%s", - "ds":"i:0/js/uwebset.js:https://chat.deepseek.com?uweb=%s", - "lc":"i:0/js/uweb2edit.js:https://longcat.chat/?uweb=%3Cp%3E%s%3C/p%3E", - "yd":"https://yandex.com/search/?text=%s", - "ima":"i:0/js/uweb2edit.js:https://ima.qq.com/chat?uweb=%3Cp%3E%s%3C/p%3E", - "bda":"i:0/js/uwebset.js:https://chat.baidu.com/search?word=%20&10uweb=%s", - "yy":"i:0/js/uweb2edit2.js:https://yiyan.baidu.com?uweb=%s", - "cv":"https://crowdview.ai/search?q=%s", - "fs":"https://forumscout.app/search?q=%s", + "b":"https://www.bing.com/search?q=%s", "bdic":"http://cn.bing.com/dict/search?q=%s", -"ki":"https://kimi.moonshot.cn/_prefill_chat?force_search=true&send_immediately=true&prefill_prompt=%s", - "hk":"i:0/js/uweb2ta.js:https://heck.ai/#10uweb=%s%0D", - "xb":"i:0/js/uwebset.js:https://www.wenxiaobai.com/chat/200006?20uweb=%s%0D", - "qw":"i:0/js/uweb2ta.js:https://chat.qwenlm.ai#uweb=%s", - "sl":"i:0/js/uwebset.js:https://www.solab.ai#uweb=%s", "ms":"https://metaso.cn?q=%s", - "lf":"i:0/js/uwebset.js:https://chat.lify.vip/chat?uweb=%s", - "gc":"i:0/js/uwebset.js:https://tianqi.gitcode.com/?uweb=%s%0D", - "msd":"i:0/js/uweb2ta.js:https://metaso.cn/?uweb=%s%0D", - "dbs":"i:0/js/uweb2edit2.js:https://ai.dangbei.com/search?uweb=%s", - "db":"i:0/js/uweb2edit2.js:https://ai.dangbei.com/chat?uweb=%s", - "df":"https://www.deepfind.co/?q=%s", - "mo":"https://monica.im/home/chat/deepseek-r1/deepseek_reasoner?q=%s", - "yw":"i:0/js/uwebset.js:https://yuewen.cn/chats/new?uweb=%s", - "zd":"https://zhida.zhihu.com/?q=%s", - "zw":"i:0/js/uwebset.js:https://zaiwen.xueban.org.cn/chat/?uweb=%s", + "ta":"https://thinkany.so/search?q=%s", + "ks":"https://kaisouai.com?q=%s", "exa":"https://exa.ai/search?c=all&q=%s", "andi":"https://andisearch.com/?q=%s", "ph":"https://phind-ai.com/search?q=%s", "gf":"https://greasyfork.org/en/scripts?filter_locale=0&sort=updated&q=%s", "repo":"https://www.awesome-repositories.com/s/results-with-ai/%s", + "dev":"https://devv.ai/search?agentMode=false&q=%s", "you":"https://you.com/search?tbm=youchat&q=%s", "p":"https://www.perplexity.ai/?q=%s", "brave":"https://search.brave.com/search?q=%s", "g":"https://google.com/search?q=%s", - "ga":"https://google.com/search?udm=50&q=%s", "git":"https://github.com/search?type=Repositories&q=%s", - "tg":"https://togoda.com/search?query=%s", + "gt":"https://kkgithub.com/search?type=Repositories&q=%s", + "360":"https://so.360.com/s?q=%s", + "tg":"https://www.tiangong.cn/result?q=%s", "cg":"i:0/js/s2ta.js:https://chatglm.cn/main/detail?%s", + "csdn":"i:0/js/s2ta.js:https://chat.csdn.net?%s", + "bdc":"i:0/js/s2editable.js:https://chat.baidu.com/?%s", "miku":"i:0/js/s2ta.js:https://www.hellomiku.com?%s", "fl":"https://felo.ai/search?q=%s", - "bg":"https://bagoodex.io/search?q=%s", - "bc":"i:0/js/uweb2ta.js:https://www.baichuan-ai.com/chat#uweb=%s", - "am":"i:0/js/uweb2ta.js:https://www.askmanyai.cn/chat#uweb=%s", - "s1":"i:0/js/uweb2input.js:https://www.sou100.com#uweb=%s", - "xa":"https://www.xanswer.com/search?q=%s", - "dw":"i:0/js/uweb2edit.js:https://beta.daiwu.cn#uweb=

    %s

    ", - "dev":"i:0/js/uweb2edit.js:https://devv.ai#uweb=

    %s

    ", - "dai":"i:0/js/uweb2ta.js:https://duckduckgo.com?ia=chat&q=h#uweb=%s", - "dk":"i:0/js/uweb2ta.js:https://y.demo.wvusd.homes/https://duckduckgo.com?ia=chat&q=h#uweb=%s", - "wa":"https://www.wolframalpha.com/input?i=%s", - "zdm":"http://search.smzdm.com/?c=youhui&s=%s", - "android":"http://www.bing.com/search?q=site:developer.android.google.cn/reference/+%s", - "bd":"https://www.baidu.com/s?wd=%s" + "bg":"https://bagoodex.io/chat?q=%s", + "bc":"i:0/js/s2ta.js:https://www.baichuan-ai.com/chat?%s", + "bd":"https://baidu.com/s?wd=%s" } diff --git a/misc/ebrowser/sitejs/mypikpak.net.js b/misc/ebrowser/sitejs/mypikpak.net.js new file mode 100644 index 00000000..25fa2192 --- /dev/null +++ b/misc/ebrowser/sitejs/mypikpak.net.js @@ -0,0 +1,12 @@ +(function() { + const originFetch = fetch; + window.fetch = (...arg) => { + if (arg[0].indexOf('area_accessible') > -1) { + return new Promise(() => { + throw new Error(); + }); + } else { + return originFetch(...arg); + } + } +})(); diff --git a/misc/ebrowser/webview.js b/misc/ebrowser/webview.js index be028645..8b6c197f 100644 --- a/misc/ebrowser/webview.js +++ b/misc/ebrowser/webview.js @@ -7,14 +7,11 @@ You should have received a copy of the GNU General Public License along with thi */ const { app, BrowserWindow, Menu, shell, clipboard, - session, protocol, dialog, ipcMain + session, protocol, net, dialog, ipcMain } = require('electron') let win; -const fs = require('fs'); -const process = require('process') -const noStdin = fs.fstatSync(0).isCharacterDevice(); -if(noStdin && !app.requestSingleInstanceLock()) +if(!app.requestSingleInstanceLock()) app.quit() else { app.on('ready', createWindow); @@ -25,21 +22,14 @@ else { } win.show() win.focus() - let i=1; - do { - if(45===args[i].charCodeAt(0)) i++; - else break; - }while(true); - cmdlineProcess(args,cwd,i-1); + cmdlineProcess(args,cwd,1); }else createWindow(); }) } Menu.setApplicationMenu(null); +const fs = require('fs'); const path = require('path') -const https = require('https'); -const url = require('url'); -var downloadMillis = 0; var translateRes; { let langs = app.getPreferredSystemLanguages(); @@ -51,28 +41,21 @@ var translateRes; var repositoryurl = "https://gitlab.com/jamesfengcao/uweb/-/raw/master/misc/ebrowser/"; const readline = require('readline'); +const process = require('process') var gredirects = []; var gredirect; var redirects; var bRedirect = true; var bJS = true; -var bForwardCookie = true; +var bForwardCookie = false; var proxies = {}; var proxy; var useragents = {}; -var downloadMenus = []; +var downloadMenus; //[] var selectMenus = []; -var defaultUA; -{ - let sys = "X11; Linux x86_64"; - if (process.platform === "win32") - sys = "Window NT 10.0; Win64; x64"; - else if (process.platform === "darwin") - sys = "Macintosh; Intel Mac OS X 10_15_7"; - defaultUA = - `Mozilla/5.0 (${sys}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/` + +var defaultUA = + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + process.versions.chrome +" Safari/537.36"; -} app.userAgentFallback = defaultUA; fs.readFile(path.join(__dirname,'redirect.json'), 'utf8', (err, jsonString) => { @@ -102,17 +85,13 @@ async function createWindow () { })(); win = new BrowserWindow( - {show: false, autoHideMenuBar: true, + {width: 800, height: 600,autoHideMenuBar: true, webPreferences: { nodeIntegration: true, contextIsolation: false, webviewTag: true, }}); win.setMenuBarVisibility(false); - win.once('ready-to-show', () => { - win.maximize(); - win.show(); - }); win.on('closed', function () { win = null }) @@ -128,10 +107,12 @@ async function createWindow () { fs.readFile(path.join(__dirname,'proxy.json'), 'utf8', (err, jsonString) => { if (err) return; try { - proxies = JSON.parse(jsonString); - let match = jsonString.match(/"([^"]+)"/); - if(match) - proxy = proxies[match[1]]; + proxies = JSON.parse(jsonString, (key,val)=>{ + if(!proxy && key==="proxyRules"){ + proxy = {proxyRules:val}; + } + return val; + }); } catch (e){console.log(e)} }); @@ -158,20 +139,12 @@ async function createWindow () { session.defaultSession.on("will-download", async (e, item) => { //item.setSavePath(save) - let curMillis = Date.now(); - if(curMillis-downloadMillis<9000){ - item.on('updated', (event, state) => { - const progress = item.getReceivedBytes() / item.getTotalBytes(); - win.setProgressBar(progress); - }); - item.on('done', () => win.setProgressBar(-1)); - return; - } + if(!downloadMenus) return; + e.preventDefault(); + let menuT = downloadContextMenuTemp(item.getURL()); + let button = await promiseContextMenu(menuT); + if(-1===button) return; e.preventDefault(); - let url = item.getURL(); - let menuT = downloadContextMenuTemp(url); - const menu = Menu.buildFromTemplate(menuT); - menu.popup(); }); win.webContents.on('console-message',cbConsoleMsg); @@ -203,20 +176,15 @@ ipcMain.on('command', (event, cmd) => { addrCommand(cmd); }); -async function addrCommand(cmd){ +function addrCommand(cmd){ if(cmd.length<3) return; let c0 = cmd.charCodeAt(0); switch(c0){ - case 33://"!" - bangcommand(q,1); - return; case 58: //':' - let iS = cmd.indexOf(' ',1); - if(iS<0) iS = cmd.length; - let arg0 = cmd.substring(1,iS); - switch(arg0){ + args = cmd.substring(1).split(/\s+/); + switch(args[0]){ case "cert": - if(cmd.length==iS) + if(args.length==1) session.defaultSession.setCertificateVerifyProc((request, callback) => { callback(0); }); @@ -224,35 +192,14 @@ async function addrCommand(cmd){ session.defaultSession.setCertificateVerifyProc(null); return; case "clear": - if(cmd.length<=iS+1){ + if(args.length==1){ session.defaultSession.clearData(); return; } - if(123===cmd.charCodeAt(iS+1)){//json - try { - let opts = JSON.parse(cmd.substring(iS+1)); - session.defaultSession.clearData(opts); - }catch(e){console.log(e)} - return; - } - let args = cmd.substring(iS+1).split(/\s+/); - switch(args[0]){ + switch(args[1]){ case "cache": session.defaultSession.clearCache(); return; - case "cookie": - if(args.length==1){ - session.defaultSession.clearStorageData({ storages: ['cookies'] }); - return; - } - { - let url = args[1]; - if(url.charCodeAt(0)!==104) url = "https://"+url; - session.defaultSession.cookies.get({ url: url }).then((cookies) => { - cookies.forEach((cookie) => { - session.defaultSession.cookies.remove(url, cookie.name)})}); - } - return; case "dns": session.defaultSession.clearHostResolverCache(); return; @@ -260,20 +207,21 @@ async function addrCommand(cmd){ session.defaultSession.clearStorageData(); return; default: + try { + let opts = JSON.parse(args.slice(1).join("")); + session.defaultSession.clearData(opts); + }catch(e){console.log(e)} } return; - case "exit": - win.close(); - return; case "ext": - session.defaultSession.loadExtension(cmd.substring(iS+1)); + session.defaultSession.loadExtension(args[1]); return; case "gr": - if(cmd.length==iS) { + if(args.length<2) { gredirect_enable(0); return; } - let i = parseInt(cmd.substring(iS+1)); + let i = parseInt(args[1]); if(i>=0 && iiS) - proxy = proxies[cmd.substring(iS+1)]; //retrieve proxy + if(args.length>1) + proxy = proxies[args[1]]; //retrieve proxy if(proxy){ - session.defaultSession.setProxy(proxy) - .then(() => {gredirect_disable()}) - .catch((error) => { - console.error('Failed to set proxy:', error); - }); + gredirect_disable(); + session.defaultSession.setProxy(proxy); } return; case "nr": bRedirect = false; return; case "ur": bRedirect = true; return; - case "sys": - { - let iHTTP = cmd.search(/https?:\/\//); - if(iHTTP<0) return; - let iEnd = cmd.indexOf(' ',iHTTP+10); - if(iEnd<0) iEnd = cmd.length; - let url = cmd.substring(iHTTP,iEnd); - let cookies = await session.defaultSession.cookies.get({url: url}); - let cookieS = cookies.map (cookie => cookie.name + '=' - + cookie.value ).join(';'); - let args = cmd.substring(5).split(/\s+/); - for(let i=1;i { - let str = data.toString(); - console.log(str); - let js = "showHtml(`"+str+"`)"; - win.webContents.executeJavaScript(js,false); - }); - } - return; case "ua": - if(cmd.length>iS){ - let ua = useragents[cmd.substring(iS+1)]; - if(ua) - session.defaultSession.setUserAgent(ua); - }else + if(args.length==2) + session.defaultSession.setUserAgent(useragents[args[1]]); + else session.defaultSession.setUserAgent(defaultUA); return; case "update": let updateurl; - if(cmd.length==iS) + if(1==args.length) updateApp(repositoryurl); else { - filename = cmd.substring(iS+1); + filename = args[1]; let iSlash = filename.lastIndexOf('/'); if(iSlash>0){ let folder = path.join(__dirname,filename.substring(0,iSlash)); @@ -370,7 +286,7 @@ function gredirect_disable(){ gredirect=null; unregisterHandler(); } - bRedirect = true; + bRedirect = false; } function gredirect_enable(i){ if(i>=gredirects.length) return; @@ -463,8 +379,7 @@ function menuArray(labelprefix, linkUrl){ { label: labelprefix+translate('Download'), click: () => { - downloadMillis = Date.now(); - win.webContents.downloadURL(linkUrl); + win.contentView.children[i].webContents.downloadURL(linkUrl); } }, ]; @@ -630,71 +545,30 @@ function cmdlineProcess(argv,cwd,extra){ } } let url=argv.slice(i1st).join(" "); - win.webContents.executeJavaScript("{let v=`"+url+"`;document.forms[0].q.value=v;handleQuery(v)}",false); + win.webContents.executeJavaScript("handleQuery(`"+url+"`)",false); win.setTitle(url); - }else if(!noStdin) - handle_stdin(5000); + } } async function cbScheme_redir(req){ if(!gredirect) return null; let oUrl = req.url; let newurl = gredirect+oUrl; - const parsedUrl = url.parse(newurl); - let headers = new Headers(); - for (var pair of req.headers.entries()) - headers.set(pair[0],pair[1]); + let options = { + body: req.body, + headers: req.headers, + method: req.method, + referer: req.referer, + duplex: "half", + bypassCustomProtocolHandlers: true + }; if(bForwardCookie){ let cookies = await session.defaultSession.cookies.get({url: oUrl}); let cookieS = cookies.map (cookie => cookie.name + '=' + cookie.value ).join(';'); - headers.set('cookie',cookieS); + options.headers['Cookie'] = cookieS; } - //missing referer header - //headers.set('referer',); - const options = { - hostname: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.path, - method: req.method, - headers: headers - }; - return new Promise(async (resolve, reject) => { - const nreq = https.request(options, (res) => { - let body = []; - res.on('data', (chunk) => { - body.push(chunk); - }); - res.on('end', () => { - try { - body = Buffer.concat(body); - const response = new Response(body, res); - resolve(response); - } catch (e) { - reject(e); - } - }); - }); - nreq.on('error', (err) => { - reject(err); - }); - if (req.body){ - try { - const reader = req.body.getReader(); - do { - const { done, value } = await reader.read(); - if (done) { - nreq.end(); - break; - } - nreq.write(value); - console.log(headers); - console.log(new TextDecoder("iso-8859-1").decode(value)); - }while (true); - }catch(e){reject(e)} - }else - nreq.end(); - }); + return fetch(newurl, options); } function registerHandler(){ @@ -807,12 +681,7 @@ function help(){ function downloadContextMenuTemp(url){ let mTemplate = [{label:url,enabled:false}, - {label: translate('Download'), - click: () => { - downloadMillis = Date.now(); - win.webContents.downloadURL(url); - } - }, + {label: translate('Download')}, { label: translate('Copy'), click: () => { @@ -841,71 +710,11 @@ function translate(str){ return str; } -function httpReq(url, method, filePath){ - fs.readFile(filePath, (err, fileData) => { - if (err) { - console.error(`Error reading file: ${err.message}`); - return; - } - - let opts = { - method: method, - headers: { - "Content-Type":'application/octet-stream', - }, - body: fileData, - }; - fetch(url,opts); +function promiseContextMenu(menuTemplate) { + return new Promise((resolve, reject) => { + menuTemplate[1].click = () => resolve(-1); + const menu = Menu.buildFromTemplate(menuTemplate); + menu.on('menu-will-close', () => resolve(-2)); + menu.popup(); }); } - -function bangcommand(q,offset){ - let iS = q.indexOf(' ',offset); - if(iS<0) iS=q.length; - let fname = q.substring(offset,iS); - let fpath = path.join(__dirname,fname+'.js'); - if (fs.existsSync(fpath)) { - fs.readFile(fpath, 'utf8',(err, js)=>{ - if (err) { - console.log(err); - return; - } - const prefix = "(function(){"; - const postfix = "})(`"; - const end ="`)"; - const fjs = `${prefix}${js}${postfix}${q}${end}`; - eval(fjs); - }); - } -} - -function handle_stdin(timeoutMs){ - let timeoutId; - let isComplete = false; - let url = ''; - const handler = ()=>{ - if(url.length<6 || (58!==url.charCodeAt(4) && 58!==url.charCodeAt(5))) - url = 'data:text/html;charset=utf-8,'+url; - win.webContents.executeJavaScript("{let v=`"+url+"`;handleQuery(v)}",false); - }; - timeoutId = setTimeout(() => { - if (!isComplete) { - isComplete = true; - handler(); - } - }, timeoutMs); - - process.stdin.setEncoding('utf8'); - process.stdin.on('data', (chunk) => { - url += chunk; - }); - process.stdin.on('end', () => { - if (!isComplete) { - isComplete = true; - clearTimeout(timeoutId); - handler(); - } - }); - // Important: Resume stdin to start reading - process.stdin.resume(); -} diff --git a/redirect.html b/redirect.html index ef5c9dc2..d3616239 100644 --- a/redirect.html +++ b/redirect.html @@ -2,12 +2,11 @@ diff --git a/sitemap.xml b/sitemap.xml index c17bb8b7..bd38c395 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,16 +2,16 @@ - https://jamesfengcao.gitlab.io/uweb/en/sitemap.xml + /en/sitemap.xml - 2026-04-28T14:35:19+08:00 + 2024-07-19T10:06:21+08:00 - https://jamesfengcao.gitlab.io/uweb/zh/sitemap.xml + /zh/sitemap.xml - 2026-04-28T15:15:41+08:00 + 2024-08-12T07:09:12+08:00 diff --git a/statichost.yml b/statichost.yml deleted file mode 100644 index 39d11b30..00000000 --- a/statichost.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: 1 - -build: - enabled: false - -deploy: - provider: statichost - target: uweb diff --git a/termux/bashrc b/termux/bashrc index 0c72379a..8c29fc26 100644 --- a/termux/bashrc +++ b/termux/bashrc @@ -27,13 +27,13 @@ v(){ d(){ word=$1 dict=${2:-ahd} - LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib tdict ~/share/dict/$dict $1 + tdict ~/share/dict/$dict $1 } z(){ #usage: z word dictname percent word=$1 - dict=~/share/dict/${2:-ety}.xz + dict=~/share/dict/$2.xz percent='' if [ "$3" ]; then percent=${3}p diff --git a/zh/_posts/index.xml b/zh/_posts/index.xml index c5febb57..9c1c86ea 100644 --- a/zh/_posts/index.xml +++ b/zh/_posts/index.xml @@ -2,256 +2,249 @@ _Posts on 超微浏览器: 威、快、高效、极致优化 - https://jamesfengcao.gitlab.io/uweb/zh/_posts/ + /zh/_posts/ Recent content in _Posts on 超微浏览器: 威、快、高效、极致优化 Hugo zh - Fri, 24 Apr 2026 11:25:36 +0800 - + Fri, 19 Jul 2024 10:09:41 +0800 + - 常用语及输入法辅佐 - https://jamesfengcao.gitlab.io/uweb/zh/input/ - Tue, 14 Oct 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/input/ - <h4 id="defaultinput">&quot;default.input&quot;</h4> <p>点击安装底部工具条共享按钮长按弹出菜单:<br> <a href="i:0gdefault.input::@地址栏%0A">地址栏</a><br> <a href="i:0gdefault.input::%20\n%0A">换行</a><br> <a href="i:0gdefault.input::@撤销@%1A%0A">CTRL-Z: undo</a><br> <a href="i:0gdefault.input::@重做@%19%0A">CTRL-Y: redo</a></p> <p>长按共享按钮弹出文件&quot;default.input&quot;定义菜单,文件每行为常用语。 常用语可以&quot;@xxxx@&quot;开头作为化名,方便用户区分无显示短语。</p> <h4 id="文件作为键盘输入">文件作为键盘输入</h4> <p>点击以下链接可安装至 <strong><a href="../links/index.html#">常用链接</a></strong> (长按底部五角星书签按钮):<br> <a href="i:0gdefault.link::文件输入::cinput%0A">utf8编码文件作为键盘输入</a></p> <h4 id="地址栏">地址栏</h4> <h5 id="地址栏空格开头开启自动补全输入法">地址栏空格开头开启自动补全输入法</h5> <p>常用语或AI提示词可放在文件&quot;default.autoc&quot;或其它“.autoc”文件中作为自动补全备选。地址栏如以空格开头,选中的补全备选会作为键盘输入到被聚焦的页面元素中。</p> <p>点击安装AI提示词:<br> <a href="i:0gdefault.autoc:: \n从上述指定的URL地址中提取数据,%0A">从上述指定的URL地址中提取数据</a></p> <h5 id="地址栏作为查询的一部分">地址栏作为查询的一部分</h5> <p>如果主屏输入框以“空格+换行”开头,则搜索引擎所用查询关键词为&quot;地址栏+输入框&quot;。用户可在地址栏汇集参考资料,而在输入框进行AI问询。</p> <h5 id="地址栏作为输入法和文本处理中心">地址栏作为输入法和文本处理中心</h5> <p>地址栏文本选择操作模式菜单项&quot;⌨️&quot;将文本输入到被聚焦的页面元素中。</p> <p><a href="../searchurl/input.html#">部件檢索</a> (推荐长按链接下载至本地使用) 等网页可输出至地址栏。用户亦可安装常用命令或链接直接处理地址栏文本。</p> - - - 常用链接 - https://jamesfengcao.gitlab.io/uweb/zh/links/ - Sun, 02 Mar 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/links/ - <h4 id="长按图像-命令-imagelink">长按图像-&gt;命令 (image.link)</h4> <p>点击以下链接可安装为 <strong>图像-&gt;命令 子菜单</strong> (长按图像-&gt;命令):<br> <a href="i:0gimage.link::百度识图:https://image.baidu.com/search/index?tn=baiduimage&word=%25u%0A">百度识图</a></p> <h4 id="下载选项-命令-downloadlink">下载选项-&gt;命令 (download.link)</h4> <p>点击以下链接可安装为 <strong>下载选项命令子菜单</strong> (下载前弹出的选项菜单-&gt;命令):<br> <a href="i:0gdownload.link::分页阅读:i:0m/js/view.html:%25u#p=1%0A">文本分页阅读</a></p> <p><a href="i:0gdownload.link::url分页转链接:i:0m/js/view.html#/js/2lnk.js:%25u#p=1%0A">url分页转链接</a></p> <p><a href="i:0gdownload.link::md分页:i:0m/js/viewmd.html:%25u#p=1%0A">markdown分页阅读</a></p> <p>按底部&quot;-&gt;&quot;按钮可自动翻到下一页。分页功能可预览远程超大文件。</p> <h4 id="安装常用链接-defaultlink">安装常用链接 (default.link)</h4> <p>点击以下链接可安装至 <strong>常用链接</strong> (长按底部五角星书签按钮):<br> <a href="i:0gdefault.link::文件输入::cinput%0A">文件作为键盘输入</a></p> <p><a href="i:0gdefault.link::网络唤醒::cwol %0A">网络唤醒:Wake-on-LAN,需在%0A前插入网卡MAC地址</a></p> <p><a href="i:0gdefault.link::长截屏::ccapture%0A">长截屏</a> (需<a href="i:61:../searchurl/func.html">长截屏模式</a>)</p> <p><a href="i:0gdefault.link::vpn:i:1dandroid.net.vpn.SETTINGS:::%0A">VPN</a><br> <a href="i:0gdefault.link::showCookie:i:53:%25c%0A">showCookie</a><br> <a href="i:0gdefault.link::wireless:i:1dandroid.settings.WIRELESS_SETTINGS:::%0A">wireless</a><br> <a href="i:0gdefault.link::显示安全证书:i:1c%0A">显示网站安全证书</a><br> <a href="i:0gdefault.link::上传坚果云: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1)+'.tgz';location.href='i:0u'+path+':https://dav.jianguoyun.com/dav/%e6%88%91%e7%9a%84%e5%9d%9a%e6%9e%9c%e4%ba%91/'+f;}%0A">上传坚果云</a></p> <p><a href="../../en/searchurl/webdav.html">更多 webdav ...</a></p> <p><a href="i:0gdefault.link::迅雷盘离线:http://pan.xunlei.com/ {let rsc=setInterval(function(){var offBtn=document.querySelector('.pan-dropdown-menu.plus-menu>a:nth-child(2)');if(offBtn){clearInterval(rsc);var wsc=setInterval(function(){offBtn.click();var textarea=document.querySelector('.fileurl-input__container>textarea');if(textarea){clearInterval(wsc);textarea.value='%25u';var event=document.createEvent('HTMLEvents');event.initEvent('input',false,true);textarea.dispatchEvent(event);document.querySelector('.pan-dialog-btn__primary').click();}},200);}},1000);}%0A">迅雷盘离线</a></p> <p><a href="i:0gdefault.link::网页全屏: location.href='i:5fsetTimeout(()=>document.documentElement.requestFullscreen(),50);';%0A">网页全屏</a></p> <p><a href="i:0gdefault.link:../searchurl/txt/link.cfg">点击安装Cookie延期,地址栏内删除特殊字符,站内搜索,seedr离线下载等</a><br> <a href="i:0gdefault.link:../searchurl/txt/offline.link">点击安装离线下载(pcloud,furk,微云等)</a></p> <h4 id="常用链接">常用链接</h4> <p><a href="../index.html#">uweb浏览器</a>中长按书签按钮可弹出常用链接菜单,这些链接定义在文件&quot;default.link&quot;中,改动过的文件清后台重启动后生效。每行格式如下:<br> [菜单名]:[url][空格][javascript脚本]<br> 其中空格及之后的脚本为可选项。url及之后的脚本支持<a href="../cmds/index.html#">&quot;%u&quot;,&quot;%s&quot;等替换</a>。<br> 脚本将在链接访问结束时自动执行。</p> <p>url除支持所有标准的http(s):,javascript:等链接外,还支持超微内部链接(&quot;:&quot;为链接第二个字符)及特殊链接(&quot;:&quot;为链接首字符)。</p> <p>不少本地链接文件(file:///)超微浏览器将会做特殊处理。仅举几例说明:<br> .js文件(同<a href="../longclick/index.html#">长按链接运行js文件</a>): 首行前两个字符为&quot;//&quot;者,超微将打开&quot;//&quot;后面的目标网址并执行此文件代码,目标网址支持<a href="../cmds/index.html">&quot;%u&quot;,&quot;%s&quot;等替换</a>。否则直接执行此文件。此时[javascript脚本]将作为运行.js文件的參数arguments[1]。推荐将常用js脚本本地链接保存在.link文件中。</p> <p><a href="../gesture/index.html#">default.gesture</a>及default.button文件采用了完全一样的格式。.gesture文件定义了手势操作。.button文件则从最后一个按钮开始倒着重定义了底部工具栏按钮单击操作。</p> <p>各类代理配置如下:<br> httpproxy::010[proxy host]:[port]<br> socks5::011[socks host]:[port]<br> noproxy::010:</p> <h3 id="为首字符特殊链接">&quot;:&quot;为首字符特殊链接</h3> <ul> <li> <p>:0001<br> 自动翻到上一页。(网页无法前进时按前进按钮可自动翻到下一页。)</p> </li> <li> <p>:0003<br> 切换全屏模式</p> </li> <li> <p>:0004<br> 屏幕旋转</p> </li> <li> <p>:001[fileurl]<br> 加入媒体库</p> </li> <li> <p>:010[代理域名]:[端口号]:[用户名]:[密码]<br> 设置http代理, &quot;:010:&quot;禁用代理。其中&quot;:[用户名]:[密码]&quot;部分为可选项。</p> - - - 长按链接弹出菜单及下载弹出菜单 - https://jamesfengcao.gitlab.io/uweb/zh/longclick/ - Sat, 01 Mar 2025 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/longclick/ - <h4 id="命令子菜单">“命令”子菜单</h4> <p>文件&quot;<a href="../links/index.html#">image.link</a>&quot;:图像的“命令”子菜单<br> 文件&quot;<a href="../links/index.html#">download.link</a>&quot;:下载“命令”子菜单</p> <p>“命令”子菜单可通过<a href="i:61:../searchurl/func.html">界面设置</a>切换为系统菜单,分别可为默认(常用服务或image.link或download.link),常用链接,常用命令。如果同时勾选常用链接及常用命令,则“命令”子菜单无视image.link及download.link, 一律弹出系统常用服务菜单。</p> <h4 id="长按链接运行第三方程序">长按链接运行第三方程序</h4> <p>配置文件<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>每行格式如下(同<a href="../cmds/index.html#">default.cmds</a>)<br> 菜单名:mimetype:命令路径<br> 命令可以包含<a href="../cmds/index.html#">%c</a>(当前网址cookie)等,执行时会被相应内容自动替换。</p> <h4 id="长按链接运行js文件">长按链接运行js文件</h4> <p>长按链接弹出菜单显示<a href="file:///data/data/info.torapp.uweb/files/longclick/">longclick</a>目录下所有js文件供用户挑选执行。<br> js文件格式如下:</p> <ul> <li>首行可以&quot;//&quot;开头,后面紧跟目标网页url,url中可包含<a href="../cmds/index.html#">&quot;%u&quot;等</a>,打开网页时会用长按的链接替换。</li> <li>首行非&quot;//&quot;开头者,整个脚本作用于当前网页,不再打开新网页。</li> <li>第二行开始为javascript代码,代码中可用arguments来获取參数。其中arguments[1]为长按的链接; arguments[2]为长按链接的文字描述; arguments[0]为js文件名。</li> </ul> + 操作选中(富)文本/元素 + /zh/textprocess/ + Thu, 23 May 2024 00:00:00 +0000 + /zh/textprocess/ + 点击以下链接可安装长按“链接”按钮菜单: 网络剪贴板:更 改ric为其它未使用标识 bing翻译 papago翻译 iciba 百度翻译 有道翻译 搜狗翻译 彩云小译 deepL 点击安装&quot;保存文本&quot;等 重启浏览器,长按“链接”按钮,将弹出菜单。若用户当前窗口并无选中文本,则选取整个页面作相应操作,否则以选中文本为准。 配置文件&quot;default.select&quot;定义了超微浏览器对选中(富)文本/元素进行的操作。没有任何选中元素则以整个网页为操作对象。每行格式如下: [菜单名]:[mimetype]:[命令行] 选中(富)文本作为命令行的标准输入,而标准输出根据mimetype进行相应处理。 mimetype用来表示命令的输入输出类型。格式为&quot;[输入mimetype]/[输出mimetype]&quot;,&quot;[输入mimetype]&quot;可为&quot;html&quot;或空(txt格式)或为以超微配置目录为基准的相对路径.js文件名; 输出可为标准的mimetype或超微特殊扩充。如: html/text/html: 选中富文本为html格式, 输出mimetype为text/html。 /uweb: 选中文本为txt格式, 输出mimetype为特殊扩充uweb,超微将把输出作为链接来处理。 /uwebA: 超微将把输出作为&quot;单一&quot;链接来处理。 /termux: 命令运行结果将作为termux下命令运行。 checked.js: 运行配置目录下checked.js,其返回值作为命令行标准输入。对任何目录型(以“/”结尾)文件url,后面可附&quot;?[文件前缀][[文件后缀]]&quot;。譬如&quot;file:///sdcard/?.png&quot;会列举出&quot;/sdcard&quot;目录下所有.png文件。此时选择选定文件,则可利用checked.js复制文件至PC。(参看下面具体配置) 配置default.select如下: 复制文本到地址栏:/uweb:printf i:15;cat 复制至PC剪贴板::ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 xsel -i&quot; 复制富文本至PC剪贴板:html:ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 xsel -i&quot; 复制文件至PC:checked.js:while read fname;do scp $fname [user:password]@192.168.2.102:Downloads/.; done 如使用剪贴板功能手机需安装uweb定制Termux,并在termux下安装openssl。 此处假定远程PC的IP地址为192.168.2.102,PC已经开通了ssh服务。建议用户配置ssh服务为免密码登录,此时用户无需将密码写入文件default.select。用户PC上安装有xsel剪贴板工具。使用其它工具请酌情修改。 采用以上配置,笔记将储存在应用内部目录下文件note.txt或note.html中(富文本)。命名笔记储存文件则由用户在地址栏输入框内指定。 手机其它应用中的文本可选中后分享给超微浏览器,再由超微浏览器作笔记或进一步分享给PC。如果其它应用无法分享选中文本,这种情况可以先复制文本至剪贴板。长按链接按钮选择适当功能即可复制至PC剪贴板。 Windows PC 对Windows PC而言,vista及以后自带clip.exe,此时配置如下: 复制文本至PC剪贴板::ssh [user:password]@192.168.2.102 clip.exe 其它推荐工具(读取PC剪贴板): pclip 电视直播 - https://jamesfengcao.gitlab.io/uweb/zh/tvlive/ - Thu, 12 Dec 2024 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/tvlive/ - <h4 id="直播源">直播源</h4> <p>直播源网址前面加上前缀&quot;i:0/js/2lnk.js:i:5g&quot;就可将任一直播源转换成直播网页。其中前缀 &quot;i:0/js/2lnk.js:&quot; 对网页使用应用assets内置小书签&quot;/js/2lnk.js&quot;转换直播源,&quot;i:0&quot;中的&quot;0&quot;表示此功能更改了网页原来的展示,有潜在的安全威胁,需用户明确同意(比如通过安装为菜单,书签,对话框确认等方式)。前缀&quot;i:5g&quot;强迫网址以文本方式展示,部分直播源以m3u为后缀,不能省略前缀&quot;i:5g&quot;。<br> <a href="i:0/js/2lnk.js:i:5ghttps://live.iptv365.org/live.txt">iptv365</a></p> <p>对超大的直播源建议用户按底部工具条下载按钮保存为离线网页,减少下载耗时。</p> <h4 id="频道">频道</h4> <p><a href="http://tv.cctv.com/live/cctv1">CCTV1</a><br> <a href="http://tv.cctv.com/live/cctv2">CCTV2财经</a><br> <a href="http://tv.cctv.com/live/cctv4">CCTV4国际</a><br> <a href="http://tv.cctv.com/live/cctv5">CCTV5体育</a><br> <a href="http://tv.cctv.com/live/cctv6">CCTV6电影</a><br> <a href="http://tv.cctv.com/live/cctv7">CCTV7军农</a><br> <a href="http://tv.cctv.com/live/cctv8">CCTV8电视剧</a><br> <a href="http://tv.cctv.com/live/cctv10">CCTV10科教</a><br> <a href="http://tv.cctv.com/live/cctv11">CCTV11戏曲</a><br> <a href="http://tv.cctv.com/live/cctv12">CCTV12社会与法</a><br> <a href="http://tv.cctv.com/live/cctv13">CCTV13新闻</a><br> <a href="http://tv.cctv.com/live/cctv15">CCTV15少儿</a><br> <a href="http://tv.cctv.com/live/cctv17">CCTV17农村</a><br> <a href="http://wanzhoulive.cbg.cn:8017/iTXwrGs/800/live.m3u8">万州综合频道</a><br> <a href="http://wanzhoulive.cbg.cn:8017/c2F0hmi/1000/live.m3u8">万州三峡移民</a><br> <a href="http://tmpstream.hyrtv.cn/xwzh/sd/live.m3u8">河源综合频道</a><br> <a href="http://tmpstream.hyrtv.cn/hygg/sd/live.m3u8">河源公共频道</a><br> <a href="http://czlive.czgd.tv:85/live/xnst.m3u8">沧州三套节目</a></p> <h4 id="电视模式配置直播源">电视模式:配置直播源</h4> <p>文件&quot;<a href="../search/index.html#">engine.search</a>&quot;为自动顺序搜索引擎列表文件,其格式与主屏搜索引擎文件&quot;home5.search&quot;类似。如果将其中的搜索引擎url以视频url代替。此时浏览器会将“engine.search”作为视频直播频道列表文件,浏览器进入电视模式,启动就会全屏播放。</p> - - - 重定向网址 - https://jamesfengcao.gitlab.io/uweb/zh/redirect/ - Thu, 12 Dec 2024 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/redirect/ - <p>⚠️<span style="color:red">重定向转发cookie</span>设置选项可允许登录情况下操作全局重定向下的网站,请确认全局重定向网址安全可靠,谨慎使用。</p> <h4 id="全局重定向">全局重定向</h4> <p>长按设置,选中&quot;自定义资源重定向&quot;。此时如果<a href="i:60/data/data/info.torapp.uweb/files/config.html:https://codeberg.org/uweb/pages/raw/branch/master/zh/searchurl/config.html">全局重定向url</a>为有效网址,</p> <ul> <li>且最后一个字符为'/'、'?'或'=',则所有网络访问被内部重定向至url:<br> &quot;[全局重定向url]+[原始url]&quot;。</li> <li>如果没有以上述字符结尾,则意味着“光秃秃”。所有网络访问被内部重定向至url:<br> &quot;[全局重定向url]+'/'+[scheme]+'/'+[原始域名和路径]&quot;</li> </ul> <p>Examples:<br> &quot;https://xxx.pages.dev/redirect?&quot;<br> &quot;https://xxx.workers.dev/&quot;</p> <p><a href="https://gitee.com/jja8/NewBingGoGo.wikis/blob/master/%E5%88%9B%E5%BB%BA%E9%AD%94%E6%B3%95%E9%93%BE%E6%8E%A5/%E8%AF%A6%E7%BB%86%E6%95%99%E5%AD%A6/CloudflareWorker%E5%88%9B%E5%BB%BA%E5%88%9B%E5%BB%BA%E9%AD%94%E6%B3%95%E9%93%BE%E6%8E%A5.md">创建免费重定向,说明类似但代码不同</a></p> <p><a href="../../en/searchurl/cloudflare/redirect.js">cloudflare workers 全局重定向代码</a><br> <a href="../../en/searchurl/val.town/redirect.js">val.town 全局重定向代码</a><br> <a href="https://github.com/torappinfo/vercel">vercel 全局重定向</a></p> <p>部署 cloudflare Pages:</p> <ul> <li>在 Github 上先 Fork <code>https://github.com/torappinfo/uweb</code>,并点上 Star !!!</li> <li>在 CF Pages 控制台中选择 <code>连接到 Git</code>后,选中 <code>uweb</code>项目。</li> <li>[可选] 给Pages绑定 CNAME自定义域名:<a href="https://www.youtube.com/watch?v=LeT4jQUh8ok&amp;t=851s">视频教程</a> <ul> <li>在 Pages控制台的 <code>自定义域</code>选项卡,下方点击 <code>设置自定义域</code>。</li> <li>按照 CF 的要求将返回你的域名DNS服务商。</li> </ul> </li> <li>使用 <code>https://xxx.pages.dev/redirect?</code> 作为全局重定向url。</li> </ul> <p>使用仓库 &quot;https://github.com/torappinfo/redirect.genez&quot; <a href="https://genez.io">部署genez.io</a></p> <p>使用仓库 &quot;https://github.com/torappinfo/fetch&quot; 入口&quot;deno.js&quot; <a href="https://deno.com/deploy">部署Deno</a></p> <h4 id="重定向文件-defaultredirect-仅在无有效全局重定向url时生效">重定向文件 &quot;default.redirect&quot; (仅在无有效全局重定向url时生效)</h4> <p><a target="_self" href="i:0gdefault.redirect:../searchurl/txt/redirect.cfg">点击添加google recaptcha国内镜像</a></p> <p>使用服务器在国外的搜索引擎体验往往不如国内的引擎。由于网站屏蔽的原因,两者之间索引权重差别很大。国外受欢迎的技术类网站因此难以在百度上搜到;国外引擎能搜到但由于其中不少结果无法访问而体验糟糕。</p> <p>其实,很多技术类网站在国内早有镜像,但由于镜像并非众所周知,其索引权重在百度上微不足道,非专门搜索不可得。</p> <p>本文介绍一种技术,可重定向国外网址至国内镜像,极大的提高国外引擎的体验,让更多用户更客观的理解全球技术。</p> <p>配置default.redirect:<br> 文件每一行格式为:<br> 域名:正则表达式:替换表达式</p> <p>其中正则表达式以java语言规定为准,表达式中不能包含':'。正则表达式为空时系统默认为与域名相同。正则表达式,替换表达式同时为空时无重定向作用,但域名会允许CORS跨域访问 (目前仅对&quot;GET&quot; request生效)。</p> <p>例子文件内容如下:<br> developer.android.com::developer.android.google.cn</p> <p>四种使用重定向的方法:</p> <ul> <li> <p>长按链接<br> 添加文件&quot;国内镜像.js&quot;至&quot;longclick&quot;目录下。<br> 文件内容如下:</p> - - - 操作选中(富)文本/元素 - https://jamesfengcao.gitlab.io/uweb/zh/textprocess/ - Thu, 23 May 2024 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/textprocess/ - <p>本文功能特别适用于超出剪贴板容量的长文本处理/共享/AI。</p> <p>点击以下链接可安装长按“链接”按钮菜单:<br> <a href="i:0gdefault.select::共享:/uwebS:%0A">共享选中文本/网页内容</a></p> <p><a href="i:0gdefault.select::临时编辑:/text/html:echo -n %22%3cmeta charset=utf-8%3e%3cbody contenteditable%3e%22;cat%0A">临时编辑</a></p> <p><a href="i:0gdefault.select::地址栏:/uwebAddr:%0A">地址栏</a></p> <p><a href="i:0gdefault.select::网络剪贴板:/uwebA:echo -n i:0/js/uweb2ta.js:https://netcut.cn/ric?A00uweb=%250A;cat%0A">网络剪贴板:更改ric为其它未使用标识</a><br> <a href="i:0gdefault.select::notems:/uwebA:echo -n i:0/js/uweb2ta.js:https://note.ms/ric?A00uweb=%250A;cat%0A">note.ms:更改ric为其它未使用标识</a></p> <p><a href="i:0gdefault.select::bing翻译:/uweb:printf 'https://cn.bing.com/translator/?from=&to=zh-Hans&text=';cat|tr ' ' '%2B'%0A">bing翻译</a><br> <a href="i:0gdefault.select::papago翻译:/uweb:printf 'https://papago.naver.com/?sk=auto&tk=zh-CN&st=';cat|tr ' ' '%2B'%0A">papago翻译</a></p> <p><a href="i:0gdefault.select::iciba:/uweb:printf 'https://m.iciba.com/';cat|tr ' ' '%2B'%0A">iciba</a><br> <a href="i:0gdefault.select::百度翻译:/uweb:printf 'https://fanyi.baidu.com/#auto/zh/';cat|tr ' ' '%2B'%0A">百度翻译</a><br> <a href="i:0gdefault.select::有道翻译:/uweb:printf 'https://m.youdao.com/translate?type=AUTO&inputtext=';cat|tr ' ' '%2B'%0A">有道翻译</a><br> <a href="i:0gdefault.select::搜狗翻译:/uweb:printf 'https://translate.sogou.com/text?transfrom=auto&transto=zh-CHS&model=general&keyword=';cat|tr ' ' '%2B'%0A">搜狗翻译</a></p> <p><a href="i:0gdefault.select::彩云小译:/uweb:print 'https://fanyi.caiyunapp.com/#/ {function tE(el,t){var e=new Event(t);el.dispatchEvent(e);}let s=document.querySelector(%22textarea%22);s.value=%60';cat;print '%60;tE(s,%22input%22);tE(s,%22keyup%22)}'%0A">彩云小译</a><br> <a href="i:0gdefault.select::deepL:/uweb:print 'https://www.deepl.com/translator {function tE(el,t){var e=new InputEvent(t);el.dispatchEvent(e);}let s=document.querySelector(%22textarea%22);s.value=%60';cat;print '%60;tE(s,%22input%22)}'%0A">deepL</a></p> <p><a target="_self" href="i:0gdefault.select:../searchurl/txt/select.cfg">点击安装&quot;保存文本&quot;等</a></p> <p>重启浏览器,长按“链接”按钮,将弹出菜单。若用户当前窗口并无选中文本,则选取整个页面作相应操作,否则以选中文本为准。</p> <p>配置文件&quot;default.select&quot;定义了<a href="..">超微浏览器</a>对选中(富)文本/元素进行的操作。没有任何选中元素则以整个网页为操作对象。每行格式如下:<br> [菜单名]:[mimetype]:[命令行]</p> <p>选中(富)文本作为命令行的标准输入,而标准输出根据mimetype进行相应处理。<br> mimetype用来表示命令的输入输出类型。格式为&quot;[输入mimetype]/[输出mimetype]&quot;,&quot;[输入mimetype]&quot;可为&quot;html&quot;或空(txt格式)或为以超微配置目录为基准的相对路径.js文件名; 输出可为标准的mimetype或超微特殊扩充。如:<br> html/text/html: 选中富文本为html格式, 输出mimetype为text/html。<br> /uweb: 选中文本为txt格式, 输出mimetype为<a href="../cmd">特殊扩充uweb</a>,超微将把输出作为<a href="../links">链接</a>来处理。<br> /uwebA: 超微将把输出作为&quot;单一&quot;链接来处理。<br> /uwebAddr: 输出到地址栏。<br> /uwebS: 共享<br> /termux: 命令运行结果将作为termux下命令运行。<br> <a target="_self" href="i:0hcheck.js:../searchurl/txt/check.js">checked.js</a>: 运行配置目录下checked.js,其返回值作为命令行标准输入。对任何目录型(以“/”结尾)文件url,后面可附&quot;?[文件前缀][<em>[文件后缀]]&quot;。譬如&quot;file:///sdcard/?</em>.png&quot;会列举出&quot;/sdcard&quot;目录下所有.png文件。此时选择选定文件,则可利用checked.js复制文件至PC。(参看下面具体配置)</p> + /zh/tvlive/ + Wed, 06 Dec 2023 00:00:00 +0000 + /zh/tvlive/ + 直播源 直播源网址前面加上前缀&quot;i:0/js/2lnk.js:i:5g&quot;就可将任一直播源转换成直播网页。其中前缀 &quot;i:0/js/2lnk.js:&quot; 对网页使用应用assets内置小书签&quot;/js/2lnk.js&quot;转换直播源,&quot;i:0&quot;中的&quot;0&quot;表示此功能更改了网页原来的展示,有潜在的安全威胁,需用户明确同意(比如通过安装为菜单,书签,对话框确认等方式)。前缀&quot;i:5g&quot;强迫网址以文本方式展示,部分直播源以m3u为后缀,不能省略前缀&quot;i:5g&quot;。 YanG-1989/m3u 频道 CCTV1 CCTV2财经 CCTV4国际 CCTV5体育 CCTV6电影 CCTV7军农 CCTV8电视剧 CCTV10科教 CCTV11戏曲 CCTV12社会与法 CCTV13新闻 CCTV15少儿 CCTV17农村 万州综合频道 万州三峡移民 龙岩综合频道 三明综合频道 三明公共频道 敦煌综合频道 河源综合频道 河源公共频道 黔东南综合频道 沧州三套节目 电视模式:配置直播源 文件&quot;engine.search&quot;为自动顺序搜索引擎列表文件,其格式与主屏搜索引擎文件&quot;home5.search&quot;类似。如果将其中的搜索引擎url以视频url代替。此时浏览器会将“engine.search”作为视频直播频道列表文件,浏览器进入电视模式,启动就会全屏播放。 定时脚本 - https://jamesfengcao.gitlab.io/uweb/zh/tcron/ + /zh/tcron/ Thu, 23 Nov 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/tcron/ - <h4 id="crontab">crontab</h4> <p>注意:1. 必须使用单一空格作为分割符。<br> 2. 必须同时满足日期及星期的要求(功能增强),crontab标准只要求满足其中一个要求。</p> <p>文件&quot;crontab&quot;每行第六部分可为url或<a href="../links/index.html#">内部链接</a>,也可为&quot;c:&quot;通知termux执行后面命令; &quot;!&quot;直接执行命令。其余格式一律作为闹钟提醒时的伴随消息。</p> <p>文件&quot;crontab&quot;自动签到例子:<br> 6 9 * * * i:p1https://www.bookschina.com/ashx/SignInApi.ashx#action=SignIn<br> 8 9 * * * i:p1https://www.bookschina.com/ashx/SignInApi.ashx#action=SignIn_Award&amp;index=1</p> <p>其中&quot;i:a1&quot;为对url发起&quot;post&quot;请求。</p> <h4 id="tcron">tcron</h4> <p>如果勾选“文件预处理”,则uweb启动时运行&quot;default.rc&quot; shell脚本。可与tcron定时管<br> 理工具(<a href="i:0bhttps://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/tcron.tgz">安装tcron</a>)配合运行定时任务,如存储清理、网页签到等。</p> <p>勾选“文件预处理”的情况下,如果存在文件&quot;default.rc2&quot;,则在超微浏览器成为前台时,此文件代码被执行。在超微永不退出的情况下,&quot;default.rc&quot;将没有任何执行机会,而&quot;default.rc2&quot;保证即使超微长时间不重启,定时脚本仍可以执行。</p> <p>usage: tcron logfile command hours [timezone delay_sec elsecommand]<br> 指定时间范围内如果命令没有被执行过,则tcron会执行一次命令。<br> 其中logfile可以不记录任何log,成功执行命令以后只需更新一下改动时间即可。<br> hours: 如果为正整数,则将每天划分为不同的时间区间(单位小时),每个区间命令只能执行一次。如果为负整数,则取绝对值,并且单位为分钟,保证下一次执行至少间隔这么多分钟。<br> hours也可以为&quot;hh:mm-hh:mm,...&quot;格式, 譬如&quot;6:00-8:30,11:00-13:00,5:30-6:30&quot;为每天三餐时间脚本执行一次。<br> timezone: 时区:譬如“8”表示北京时间。(默认为8)<br> delay_sec: 等待指定秒数后再执行命令,防止命令被集中执行。<br> elsecommand: 无需执行命令command时执行。</p> <p>ex:<br> set PATH=/system/bin:/data/data/info.torapp.uweb/files/bin<br> #天翼云每天签到一次<br> tcron /sdcard/a &quot;cloudpan189-go sign;toybox touch /sdcard/a&quot; 24<br> #每30天清空baidu目录<br> tcron /sdcard/b &quot;rm -rf /sdcard/baidu/*;toybox touch /sdcard/b&quot; 720</p> <p><a target="_self" href="i:0hdefault.rc:../searchurl/txt/default.rc">安装default.rc模板文件(termux)</a></p> <p>可能用到的命令:<br> termux中安装remind,可配置各类提醒功能,十分强大。<br> apt install remind</p> + /zh/tcron/ + crontab 注意:1. 必须使用单一空格作为分割符。 2. 必须同时满足日期及星期的要求(功能增强),crontab标准只要求满足其中一个要求。 文件&quot;crontab&quot;每行第六部分可为url或内部链接,也可为&quot;c:&quot;通知termux执行后面命令; &quot;!&quot;直接执行命令。其余格式一律作为闹钟提醒时的伴随消息。 文件&quot;crontab&quot;自动签到例子: 5 8,9 * * * i:a1http://m.bookschina.com/ActityDaily/AvSignIn 7 9 * * * i:a1http://m.bookschina.com/ActityDaily/AvSignInTakeQuan 6 9 * * * i:a1http://m.bookschina.com/UserCenter/SignInApi?action=SignIn 8 9 * * * i:a1http://m.bookschina.com/UserCenter/SignInAward?index=1 其中&quot;i:a1&quot;为对url发起&quot;post&quot;请求。 tcron 如果勾选“文件预处理”,则uweb启动时运行&quot;default.rc&quot; shell脚本。可与tcron定时管 理工具(安装tcron)配合运行定时任务,如存储清理、网页签到等。 勾选“文件预处理”的情况下,如果存在文件&quot;default.rc2&quot;,则在超微浏览器成为前台时,此文件代码被执行。在超微永不退出的情况下,&quot;default.rc&quot;将没有任何执行机会,而&quot;default.rc2&quot;保证即使超微长时间不重启,定时脚本仍可以执行。 usage: tcron logfile command hours [timezone delay_sec elsecommand] 指定时间范围内如果命令没有被执行过,则tcron会执行一次命令。 其中logfile可以不记录任何log,成功执行命令以后只需更新一下改动时间即可。 hours: 如果为正整数,则将每天划分为不同的时间区间(单位小时),每个区间命令只能执行一次。如果为负整数,则取绝对值,并且单位为分钟,保证下一次执行至少间隔这么多分钟。 hours也可以为&quot;hh:mm-hh:mm,...&quot;格式, 譬如&quot;6:00-8:30,11:00-13:00,5:30-6:30&quot;为每天三餐时间脚本执行一次。 timezone: 时区:譬如“8”表示北京时间。(默认为8) delay_sec: 等待指定秒数后再执行命令,防止命令被集中执行。 elsecommand: 无需执行命令command时执行。 ex: set PATH=/system/bin:/data/data/info.torapp.uweb/files/bin #天翼云每天签到一次 tcron /sdcard/a &quot;cloudpan189-go sign;toybox touch /sdcard/a&quot; 24 #每30天清空baidu目录 + + + 常用链接 + /zh/links/ + Mon, 10 Apr 2023 00:00:00 +0000 + /zh/links/ + 点击以下链接可安装至常用链接: 长截屏 (需长截屏模式) VPN showCookie wireless 显示网站安全证书 上传坚果云 更多 webdav ... 迅雷盘离线 网页全屏 点击安装Cookie延期,地址栏内删除特殊字符,站内搜索,seedr离线下载等 点击安装离线下载(pcloud,furk,微云等) uweb浏览器中长按书签按钮可弹出常用链接菜单,这些链接定义在文件&quot;default.link&quot;中,改动过的文件清后台重启动后生效。每行格式如下: [菜单名]:[url][空格][javascript脚本] 其中空格及之后的脚本为可选项。url及之后的脚本支持&quot;%u&quot;,&quot;%s&quot;等替换。 脚本将在链接访问结束时自动执行。 url除支持所有标准的http(s):,javascript:等链接外,还支持超微内部链接(&quot;:&quot;为链接第二个字符)及特殊链接(&quot;:&quot;为链接首字符)。 不少本地链接文件(file:///)超微浏览器将会做特殊处理。仅举几例说明: .js文件(同长按链接运行js文件): 首行前两个字符为&quot;//&quot;者,超微将打开&quot;//&quot;后面的目标网址并执行此文件代码,目标网址支持&quot;%u&quot;,&quot;%s&quot;等替换。否则直接执行此文件。此时[javascript脚本]将作为运行.js文件的參数arguments[1]。推荐将常用js脚本本地链接保存在.link文件中。 default.gesture及default.button文件采用了完全一样的格式。.gesture文件定义了手势操作。.button文件则从最后一个按钮开始倒着重定义了底部工具栏按钮单击操作。 各类代理配置如下: httpproxy::010[proxy host]:[port] socks5::011[socks host]:[port] noproxy::010: &quot;:&quot;为首字符特殊链接 :0001 自动翻到上一页。(网页无法前进时按前进按钮可自动翻到下一页。) :0003 切换全屏模式 :0004 屏幕旋转 :001[fileurl] 加入媒体库 :010[proxy host]:[port] 设置http代理, &quot;:010:&quot;禁用代理。 :011[socks host]:[port] socks代理 &quot;i:&quot;内部链接: i:0m[bookmarklet index|prefix|c[cssFlag]]:[url] 将url作为网站访问,[bookmarklet index]至少占两个字符。 c[cssFlag]: For example, &quot;c12&quot; will apply the third and fourth global CSS (12=2^2+2^3). All other cases will be treated as prefix, the real visited url is &quot;[prefix]+url&quot;. 小技巧 - https://jamesfengcao.gitlab.io/uweb/zh/tips/ + /zh/tips/ Sat, 04 Mar 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/tips/ - <p><strong>搜索配置小技巧</strong></p> <ul> <li>问小白需真实发送一次聊天后搜索引擎才能正常使用。<br> PC模式 + 勾选选项&quot;宽屏显示&quot; + 全局脚本&quot;强制缩放&quot;下可打开联网搜索。以后就无需使用PC模式。</li> <li>某些引擎有配置选项, 可空搜一次,此时在网页界面上可以开关选项。</li> </ul> <p><strong>免魔法国内直接使用系列</strong><br> <a href="../redirect/index.html#">使用重定向访问国外技术网址</a></p> <p><strong>目录配置及使用外部文件管理器</strong><br> 超微浏览器可以将配置目录或子目录符号链接至任意外部公共目录。安装有定制termux的用户也可以使用移动设备自带或第三方文件管理器管理超微内部指定目录。具体配置可见<a href="../../en/acmd/index.html#">Shell command mode</a>。</p> <p><strong>准确显示PC网页</strong>:<br> PC模式 + 勾选选项&quot;宽屏显示&quot; + 全局脚本&quot;强制缩放&quot;。<br> 如果有对话框仍然比屏幕更宽,可按底部工具条按钮&quot;📄&quot;。</p> <p><strong>多主屏</strong>:<br> home5.html为自定义主屏,home6.mht/home6.search/home6.html, home7.search ...为多主屏(前进按钮可进)。同前缀文件中.mht文件优先于.search文件优先于.html文件。home4.html, home3.html ... (长按后退按钮可进)。</p> <p><strong>自动翻页</strong><br> 长按后退按钮自动往前翻页(主屏上长按后退出现-1屏,-2屏...,短按前进按钮+1屏,+2屏...),长按前进按钮弹出系统菜单。</p> <p><strong>配置临时修改</strong><br> 配置后如果没有正常退出或转入后台的话,超微不会自动保存设置更改,此时如果清后台强制退出,下次启动超微会使用原有配置。</p> <p><strong>临时恢复UA (user agent)至android默认浏览器</strong><br> UA为非默认时,点击PC按钮将恢复UA为默认,同时触发不保存UA状态,下次启动浏览器时恢复到原有UA。这样用户可常用一些有力的UA配置,仅偶尔使用默认配置,无需反复切换。</p> <p><strong>快速编辑文件</strong><br> 在浏览器文件管理器中长按文件名,弹出菜单中选择分享,系统会优先弹出相应的文件编辑器。<br> <a href="../filenames">配置文件列表</a>中直接点击文件名即可编辑。</p> + /zh/tips/ + 免魔法国内直接使用系列 使用重定向访问国外技术网址 google翻译 目录配置及使用外部文件管理器 超微浏览器可以将配置目录或子目录符号链接至任意外部公共目录。安装有定制termux的用户也可以使用移动设备自带或第三方文件管理器管理超微内部指定目录。具体配置可见Shell command mode。 准确显示PC网页: PC模式 + 勾选选项&quot;宽屏显示&quot; + 全局脚本&quot;强制缩放&quot;。 多主屏: home5.html为自定义主屏,home6.mht/home6.search/home6.html, home7.search ...为多主屏(前进按钮可进)。同前缀文件中.mht文件优先于.search文件优先于.html文件。home4.html, home3.html ... (长按后退按钮可进)。 自动翻页 长按后退按钮自动往前翻页(主屏上长按后退出现-1屏,-2屏...,短按前进按钮+1屏,+2屏...),长按前进按钮弹出系统菜单。 配置临时修改 配置后如果没有正常退出或转入后台的话,超微不会自动保存设置更改,此时如果清后台强制退出,下次启动超微会使用原有配置。 临时恢复UA (user agent)至android默认浏览器 UA为非默认时,点击PC按钮将恢复UA为默认,同时触发不保存UA状态,下次启动浏览器时恢复到原有UA。这样用户可常用一些有力的UA配置,仅偶尔使用默认配置,无需反复切换。 快速编辑文件 在浏览器文件管理器中长按文件名,弹出菜单中选择分享,系统会优先弹出相应的文件编辑器。 配置文件列表中直接点击文件名即可编辑。 特定网址脚本、样式、额外html及预处理 - https://jamesfengcao.gitlab.io/uweb/zh/sitejs/ + /zh/sitejs/ Sat, 28 Jan 2023 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/sitejs/ - <p>技巧等级:中级</p> <h3 id="脚本-第一时间装载js脚本见下面sitecss条目">脚本 (第一时间装载js脚本见下面sitecss条目)</h3> <ul> <li>脚本需命名为 &quot;[根域名].js&quot;,譬如baidu.com.js 或tieba.baidu.com.js 。此脚本将自动作用于所有相同根域名的网址上。如有多个脚本满足条件,以最长文件名为准。</li> <li>这些脚本需放到/data/data/info.torapp.uweb/files/sitejs目录下,数量没有限制,上百万都不成问题。</li> <li>长按窗口按钮,勾选“执行网址用户脚本”。</li> <li>脚本执行对浏览器无性能影响,即使有百万脚本存在。</li> <li>目前支持两段、三段及少数四段域名(最后两段不超过6字如com.cn的域名可取四段)。所以脚本请不要以很长的域名来命名。</li> </ul> <h3 id="样式及第一时间装载js脚本">样式及第一时间装载js脚本</h3> <ul> <li>与此类似,用户样式需命名为 &quot;[根域名].css&quot;,譬如baidu.com.css 或tieba.baidu.com.css。</li> <li>样式文件需放到sitecss目录下。</li> <li>sitecss目录下&quot;[根域名].js&quot;文件会在第一时间装载。</li> <li>长按窗口按钮,勾选“使用网址用户样式”。</li> <li>如果文件“default.css”存在,访问网址时如果没有与域名匹配的css文件,则使用此默认样式文件。</li> <li>default.css可作为夜间模式来使用,此时default.css为夜间模式css,而黑色主题类网址对应的域名为空文件。此种设定情况下仅白色主题网页会使用夜间模式css。</li> </ul> <h3 id="额外html及预处理">额外html及预处理</h3> <ul> <li>需命名为 &quot;[域名].html&quot;,譬如baidu.com.html。注意此处与sitejs, sitecss不同,不再是&quot;[根域名]&quot;。</li> <li>文件需放到siteextra目录下。</li> <li>长按窗口按钮,勾选“网址附加内容”。</li> </ul> <p>额外html可以以&quot;&lt;textarea&gt;&quot;或&quot;&lt;div&gt;&lt;textarea&gt;&quot;等结尾,此时超微算法自动判定用户欲对网址html源代码进行处理,并将网址html源码附加在用户html后面,从而成为textarea元素的内容,供用户进行预处理。</p> <p>文件&quot;sitejs/.js&quot;,&quot;sitecss/.css&quot;,&quot;sitecss/.js&quot;和&quot;siteextra/.html&quot;可作用于一切非http url(本地文件,浏览器界面等)。</p> + /zh/sitejs/ + 技巧等级:中级 脚本 (第一时间装载js脚本见下面sitecss条目) 脚本需命名为 &quot;[根域名].js&quot;,譬如baidu.com.js 或tieba.baidu.com.js 。此脚本将自动作用于所有相同根域名的网址上。如有多个脚本满足条件,以最长文件名为准。 这些脚本需放到/data/data/info.torapp.uweb/files/sitejs目录下,数量没有限制,上百万都不成问题。 长按窗口按钮,勾选“执行网址用户脚本”。 脚本执行对浏览器无性能影响,即使有百万脚本存在。 目前支持两段、三段及少数四段域名(最后两段不超过6字如com.cn的域名可取四段)。所以脚本请不要以很长的域名来命名。 样式及第一时间装载js脚本 与此类似,用户样式需命名为 &quot;[根域名].css&quot;,譬如baidu.com.css 或tieba.baidu.com.css。 样式文件需放到sitecss目录下。 sitecss目录下&quot;[根域名].js&quot;文件会在第一时间装载。 长按窗口按钮,勾选“使用网址用户样式”。 如果文件“default.css”存在,访问网址时如果没有与域名匹配的css文件,则使用此默认样式文件。 default.css可作为夜间模式来使用,此时default.css为夜间模式css,而黑色主题类网址对应的域名为空文件。此种设定情况下仅白色主题网页会使用夜间模式css。 额外html及预处理 需命名为 &quot;[域名].html&quot;,譬如baidu.com.html。注意此处与sitejs, sitecss不同,不再是&quot;[根域名]&quot;。 文件需放到siteextra目录下。 长按窗口按钮,勾选“网址附加内容”。 额外html可以以&quot;&lt;textarea&gt;&quot;或&quot;&lt;div&gt;&lt;textarea&gt;&quot;等结尾,此时超微算法自动判定用户欲对网址html源代码进行处理,并将网址html源码附加在用户html后面,从而成为textarea元素的内容,供用户进行预处理。 文件&quot;sitejs/.js&quot;,&quot;sitecss/.css&quot;,&quot;sitecss/.js&quot;和&quot;siteextra/.html&quot;可作用于一切非http url(本地文件,浏览器界面等)。 html5应用 - https://jamesfengcao.gitlab.io/uweb/zh/html5/ + /zh/html5/ Wed, 27 Jul 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/html5/ - <p>mdict字典搜索引擎:<br> <a href="../../en/bookmark/index.html#">书签页面</a>可字典扫描并自动添加。<br> 长按底部右箭头弹出系统菜单=&gt;添加搜索引擎=&gt;第三行输入搜索引擎串。对于需要批量添加的用户,显示主屏时,可长按底部时钟按钮,点击编辑器,然后添加保存,清后台重启生效。mdict搜索引擎串有以下两类(推荐第一类)。</p> <p>i:5ifile:///.../xxx.mdx,xxx.mdd?app=https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict.html#word=%s</p> <p>其中&quot;/.../xxx.mdx,xxx.mdd&quot;为词典文件全路径。</p> <p>i:5ihttps://uwebzh.netlify.app/zh/searchurl/txt/mdict.html?file=mdict/xxx.mdx,mdict/xxx.mdd#word=%s</p> <p>对于这类搜索引擎,字典文件必须位于配置目录应用子目录&quot;app&quot;下。上述字典搜索引擎例子中文件&quot;xxx.mdx&quot;及&quot;xxx.mdd&quot;位于&quot;.../app/mdict&quot;下。为方便文件操作,用户可<a href="../../en/bookmark/index.html#">符号链接&quot;app&quot;至任意公共目录</a>。</p> <p><a target="_self" href="i:0happ/txtview.html:../searchurl/txt/txtview.html">点击安装超大文件阅读器(支持txt, html, markdown)</a><br> <a target="_self" href="i:0happ/markdeep.html:../searchurl/txt/markdeep.html">点击安装超大文件阅读器(markdeep版, latex, diagram,graphviz等)</a><br> <a target="_self" href="i:0happ/plyr.html:../searchurl/txt/plyr.cfg">点击安装plyr视频播放器</a><br> <a target="_self" href="i:0happ/dplayer.html:../searchurl/txt/dplayer.html">点击安装dplayer视频播放器</a><br> <a target="_self" href="i:0happ/pdfviewer.html:../searchurl/txt/pdfviewer.html">点击安装pdf阅读器</a><br> <a target="_self" href="i:0happ/epub.html:../searchurl/txt/epub.html">点击安装epub阅读器(作者:llili)</a><br> <a target="_self" href="i:0happ/djvu.html:../searchurl/txt/djvu.html">点击安装djvu阅读器</a><br> 相应的菜单安装可见<a href="../urls/index.html#">浏览器特色服务</a></p> <p>超微配置目录下的子目录名如果以&quot;app&quot;开始(譬如&quot;appPDF&quot;),则这些&quot;app&quot;开头目录树下放置的html5应用将可获得功能增强。</p> <p><a href="../filecap/index.html#">配置default.filecap</a>并打开选项“文件预处理”,清后台重启浏览器后超微可直接阅读应用对应格式文件。<br> <a target="_self" href="i:0gdefault.filecap:../searchurl/txt/filecap.cfg">点击配置pdf.js,djvu.js,epub.js,超大文件阅读器</a></p> <p>超大文件阅读器txtview.html url如下:<br> file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#page=[xxx]<br> file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#offset=[xxxx]&amp;[length]<br> file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#page=[xxx]<br> file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#offset=[xxxx]&amp;[length]<br> 譬如&quot;#offset=10000&amp;500&quot;会访问超大文件偏移量10000处长度为500的内容。<br> 所有阅读器均支持箭头按钮(短按前进按钮或长按后退按钮)自动翻页。</p> <p>比较有用的是mozilla的pdf.js,可用来显示在线或本地pdf文件。url如下:<br> file:///data/user/0/info.torapp.uweb/files/app/pdfviewer.html?file=[绝对或相对路径].pdf#page=[xxx]<br> 则浏览器直接跳转到pdf文件指定页。与主屏多引擎搜索及少量脚本结合使用,可对任何pdf文件进行字典检索。</p> <p>下面是一些类似的应用:<br> djvu.js应用的访问url如下:<br> file:///data/user/0/info.torapp.uweb/files/app/djvu.html?url=[绝对或相对路径或url].pdf#page=[xxx]</p> <p>epub.js<br> sampotts/plyr : video, YouTube and Vimeo player<br> videojs/video.js<br> bilibili/flv.js<br> MoePlayer/DPlayer<br> Streamedian/html5_rtsp_player<br> MoePlayer/APlayer : music player</p> + /zh/html5/ + mdict字典搜索引擎: 书签页面可字典扫描并自动添加。 长按底部右箭头弹出系统菜单=&gt;添加搜索引擎=&gt;第三行输入搜索引擎串。对于需要批量添加的用户,显示主屏时,可长按底部时钟按钮,点击编辑器,然后添加保存,清后台重启生效。mdict搜索引擎串有以下两类(推荐第一类)。 i:5ifile:///.../xxx.mdx,xxx.mdd?app=https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict.html#word=%s 其中&quot;/.../xxx.mdx,xxx.mdd&quot;为词典文件全路径。 i:5ihttps://uwebzh.netlify.app/zh/searchurl/txt/mdict.html?file=mdict/xxx.mdx,mdict/xxx.mdd#word=%s 对于这类搜索引擎,字典文件必须位于配置目录应用子目录&quot;app&quot;下。上述字典搜索引擎例子中文件&quot;xxx.mdx&quot;及&quot;xxx.mdd&quot;位于&quot;.../app/mdict&quot;下。为方便文件操作,用户可符号链接&quot;app&quot;至任意公共目录。 点击安装超大文件阅读器(支持txt, html, markdown) 点击安装超大文件阅读器(markdeep版, latex, diagram,graphviz等) 点击安装plyr视频播放器 点击安装dplayer视频播放器 点击安装pdf阅读器 点击安装epub阅读器(作者:llili) 点击安装djvu阅读器 相应的菜单安装可见浏览器特色服务 超微配置目录下的子目录名如果以&quot;app&quot;开始(譬如&quot;appPDF&quot;),则这些&quot;app&quot;开头目录树下放置的html5应用将可获得功能增强。 配置default.filecap并打开选项“文件预处理”,清后台重启浏览器后超微可直接阅读应用对应格式文件。 点击配置pdf.js,djvu.js,epub.js,超大文件阅读器 超大文件阅读器txtview.html url如下: file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#page=[xxx] file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#offset=[xxxx]&amp;[length] file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#page=[xxx] file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#offset=[xxxx]&amp;[length] 譬如&quot;#offset=10000&amp;500&quot;会访问超大文件偏移量10000处长度为500的内容。 所有阅读器均支持箭头按钮(短按前进按钮或长按后退按钮)自动翻页。 比较有用的是mozilla的pdf.js,可用来显示在线或本地pdf文件。url如下: file:///data/user/0/info.torapp.uweb/files/app/pdfviewer.html?file=[绝对或相对路径].pdf#page=[xxx] 则浏览器直接跳转到pdf文件指定页。与主屏多引擎搜索及少量脚本结合使用,可对任何pdf文件进行字典检索。 下面是一些类似的应用: djvu.js应用的访问url如下: file:///data/user/0/info.torapp.uweb/files/app/djvu.html?url=[绝对或相对路径或url].pdf#page=[xxx] epub.js sampotts/plyr : video, YouTube and Vimeo player videojs/video.js bilibili/flv.js MoePlayer/DPlayer Streamedian/html5_rtsp_player MoePlayer/APlayer : music player 信息隐藏技术总览 - https://jamesfengcao.gitlab.io/uweb/zh/adblock/ + /zh/adblock/ Sat, 25 Jun 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/adblock/ - <p>总体来说,分为手动控制和针对特定网站的规则两大类办法。手动控制可以保存为网站配置从而自动化。</p> <ul> <li> <p><a href="../adblock_domain/index.html#">双正则表达式根域名隐藏</a>。</p> <ul> <li>可使用<a href="../bookmarklet/index.html#">列出外部脚本小书签</a>生成外部js文件列表,长按可疑链接(一般为域名不同的外链),执行“屏蔽根域名”。</li> </ul> </li> <li> <p><a href="../sitejs/index.html#">针对特定网站的脚本样式</a>。</p> <ul> <li>长按底部工具栏&quot;js&quot;按钮,执行&quot;标记不良元素&quot;菜单命令,点击页面元素会弹出对话框显示元素及祖先所有属性,并生成css屏蔽代码。默认使用“display:none”屏蔽,但如果上述显示属性中出现过&quot;display&quot;,则建议使用&quot;transform:scale(0)!important&quot;屏蔽。</li> </ul> </li> <li> <p>长按底部工具栏窗口管理按钮,选取&quot;仅显示图片&quot;或&quot;仅显示视频&quot;,图片视频网站彻底干净。选取&quot;禁用伪元素&quot;,&quot;禁用iframe&quot;。更多可参看<a href="../adblock_css/index.html#">自定义样式</a>。</p> <ul> <li>保存书签时可在网址前面添加&quot;i:0mc32:&quot;,则整个网址树自动采用&quot;仅显示图片&quot;。没有任何不良信息。改为&quot;c16&quot;则为&quot;仅显示视频&quot;。&quot;c12&quot;则同时采用&quot;禁用伪元素&quot;,&quot;禁用iframe&quot;。</li> </ul> </li> <li> <p>长按[☰]按钮&quot;自动全屏播放&quot;,直接<a href="../video/index.html#">全屏无干扰播放</a>。不良信息没有任何机会出现。不使用全局脚本“自动全屏播放”的情况下,还可以有以下几种方法:</p> <ul> <li>使用<a href="../urls/index.html#">常用服务</a>自动全屏播放菜单(长按视频链接-&gt;命令),则页面视频会自动全屏播放。按设置按钮,如果勾选“允许自动播放”,则今后此窗口内其它任何视频网址都将会自动全屏无干扰播放。保存书签时可在网址前面添加&quot;i:5f&quot;。</li> <li>保存书签时可在网址前面添加&quot;i:0mi:5f:&quot;,则整个网址树自动全屏播放。</li> </ul> </li> <li> <p>长按设置,选取&quot;拦截外链脚本&quot;。可在<a href="i:61:../zh/searchurl/func.html">界面配置及杂项</a>网页额外拦截第三方可疑资源。可<a href="file:///data/data/info.torapp.uweb/files/js.allow">配置白名单js.allow</a>。</p> </li> <li> <p>长按[☰]按钮可隐藏浮动信息,移除横幅,清空定时器(防止定时触发不良信息),中断可疑事件(防止用户操作触发),等待(防止延迟触发)。</p> </li> <li> <p>直接关闭图像。</p> </li> <li> <p>关闭[JS]脚本。</p> </li> <li> <p><a href="file:///data/data/info.torapp.uweb/files/url.deny">url.deny</a>。需要屏蔽的url正则表达式(java语法),忽视回车,可用&quot;#&quot;开头注释。</p> </li> </ul> + /zh/adblock/ + 总体来说,分为手动控制和针对特定网站的规则两大类办法。手动控制可以保存为网站配置从而自动化。 双正则表达式根域名隐藏。 可使用列出外部脚本小书签生成外部js文件列表,长按可疑链接(一般为域名不同的外链),执行“屏蔽根域名”。 针对特定网站的脚本样式。 长按底部工具栏&quot;js&quot;按钮,执行&quot;标记不良元素&quot;菜单命令,点击页面元素会弹出对话框显示元素及祖先所有属性,并生成css屏蔽代码。默认使用“display:none”屏蔽,但如果上述显示属性中出现过&quot;display&quot;,则建议使用&quot;transform:scale(0)!important&quot;屏蔽。 长按底部工具栏窗口管理按钮,选取&quot;仅显示图片&quot;或&quot;仅显示视频&quot;,图片视频网站彻底干净。选取&quot;禁用伪元素&quot;,&quot;禁用iframe&quot;。更多可参看自定义样式。 保存书签时可在网址前面添加&quot;i:0mc32:&quot;,则整个网址树自动采用&quot;仅显示图片&quot;。没有任何不良信息。改为&quot;c16&quot;则为&quot;仅显示视频&quot;。&quot;c12&quot;则同时采用&quot;禁用伪元素&quot;,&quot;禁用iframe&quot;。 长按[☰]按钮&quot;自动全屏播放&quot;,直接全屏无干扰播放。不良信息没有任何机会出现。不使用全局脚本“自动全屏播放”的情况下,还可以有以下几种方法: 使用常用服务自动全屏播放菜单(长按视频链接-&gt;命令),则页面视频会自动全屏播放。按设置按钮,如果勾选“允许自动播放”,则今后此窗口内其它任何视频网址都将会自动全屏无干扰播放。保存书签时可在网址前面添加&quot;i:5f&quot;。 保存书签时可在网址前面添加&quot;i:0mi:5f:&quot;,则整个网址树自动全屏播放。 长按设置,选取&quot;拦截外链脚本&quot;。可在界面配置及杂项网页额外拦截第三方可疑资源。可配置白名单js.allow。 长按[☰]按钮可隐藏浮动信息,移除横幅,清空定时器(防止定时触发不良信息),中断可疑事件(防止用户操作触发),等待(防止延迟触发)。 直接关闭图像。 关闭[JS]脚本。 url.deny。需要屏蔽的url正则表达式(java语法),忽视回车,可用&quot;#&quot;开头注释。 小书签 - https://jamesfengcao.gitlab.io/uweb/zh/bookmarklet/ + /zh/bookmarklet/ Fri, 24 Jun 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/bookmarklet/ - <p><a href="../index.html#">超微浏览器</a>支持直接运行远程网址上的小书签(Bookmarklet),将本页面或其它包含小书签网址加入书签。使用时只需长按小书签链接,点击“新窗口打开”,小书签将作用于超微浏览器最后一个窗口(非小书签窗口)页面上。</p> <p><a href="javascript:{let es=document.getElementsByTagName('script');let urls='';for(let i=0;i<es.length;i++){if(es[i].src)urls+=es[i].src+'<br>';}let w=window.open(''),s=w.document;s.write(urls);s.close();}">列出外部脚本</a></p> <p><a target="_self" href="javascript:alert(navigator.userAgent)">查看浏览器UA</a><br> <a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.cookie))})()">网页cookie</a><br> <a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.documentElement.innerHTML))})()">网页源码</a><br> <a href="javascript:function%20gett(w){try{var%20lm=new%20Date(w.document.lastModified);if(lm>maxd)maxd=lm;for(var%20i=0;F=w.frames[i];i++){gett(F);}}catch(e){}}var%20now=new%20Date();var%20maxd=new%20Date(document.lastModified);gett(window);if(maxd.getTime()==0||now.toUTCString()==maxd.toUTCString()){alert('Page%20is%20dynamically%20generated,%20cannot%20determine%20date.');}else{alert('Page%20was%20last%20modified%20'+maxd.toLocaleString());}" class="bookmarklet" rel="nofollow">显示网页最后更改时间</a></p> <p><a href="javascript:(function(){var script=document.createElement('script');script.src='//fastly.jsdelivr.net/npm/eruda';document.body.appendChild(script);script.onload=function(){eruda.init()}})()">Eruda: mobile console</a><br> <a href="javascript:window.open('https://api.qrserver.com/v1/create-qr-code/?size=150x150&data='%20+%20decodeURIComponent(location.href));void(0);">生成二维码</a></p> <p><a href="javascript:(function(){var x,i; x = document.forms; for (i = 0; i &lt; x.length; ++i) x[i].method=&quot;get&quot;; alert(&quot;Changed &quot; + x.length + &quot; forms to use the GET method. After submitting a form from this page, you should be able to bookmark the result.&quot;); })();">POST转GET</a><br> <a href="javascript:(function(){var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==&quot;hidden&quot;){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C(&quot;div&quot;); label=C(&quot;label&quot;); A(div, label); A(label, D.createTextNode(e.name + &quot;: &quot;)); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C(&quot;input&quot;);/*for ie*/ ne.type=&quot;text&quot;; ne.value=e.value; A(label, ne); --j;}})()">Shows all form elements</a><br> <a href="javascript:(function(){var x,k,f,j;x=document.forms;for (k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j){f[j].disabled=false; f[j].readOnly=false;}}})()">Enables all form elements</a></p> + /zh/bookmarklet/ + 超微浏览器支持直接运行远程网址上的小书签(Bookmarklet),将本页面或其它包含小书签网址加入书签。使用时只需长按小书签链接,点击“新窗口打开”,小书签将作用于超微浏览器最后一个窗口(非小书签窗口)页面上。 列出外部脚本 查看浏览器UA 网页cookie 网页源码 显示网页最后更改时间 Eruda: mobile console 生成二维码 POST转GET Shows all form elements Enables all form elements 切换复选框状态 全选复选框 复选框全不选 切换表内复选框状态 解除选择复制限制(无效时可设UA为PC) 恢复长按菜单 正则搜索 表格排序 BugMeNot Android TV - https://jamesfengcao.gitlab.io/uweb/zh/androidtv/ + /zh/androidtv/ Wed, 18 May 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/androidtv/ - <p>TV端推荐打开自动播放选项,全局脚本打开自动全屏播放,全局样式打开“仅显示图片“,禁止js confirm对话框。</p> <p>点击以下链接可直接设置主屏为书签并添加链接。Android TV可从手机端接收视频url并打开,发送见常用服务:<br> <a href="i:0ghome5.html::<a href=%22i:1w%22>等待从网络接收url并打开</a>%0A">等待从网络接收url并打开</a></p> <p><a href="i:0ghome5.html::<a href=%22i:1w1%22>等待接收url沉默版</a>%0A">等待接收url沉默版</a></p> <p><a href="i:0ghome5.html::<a href=%22file:///data/data/info.torapp.uweb/files/bookmark.html%22>书签</a>%0A">书签</a></p> <p>点击以下链接添加常用服务:<br> <a href="i:01添加书签至主屏:i:51../home5:">添加书签至主屏</a></p> <p>Android TV可利用顺序搜索使用箭头按钮切换频道。顺序搜索引擎文件engine.search中的搜索引擎url如果不包含'%s',则搜索引擎只是简单的固定网页url,此时顺序搜索表现为频道切换。更多信息见多引擎搜索页面。</p> + /zh/androidtv/ + TV端推荐打开自动播放选项,全局脚本打开自动全屏播放,全局样式打开“仅显示图片“,禁止js confirm对话框。 点击以下链接可直接设置主屏为书签并添加链接。Android TV可从手机端接收视频url并打开,发送见常用服务: 等待从网络接收url并打开 等待接收url沉默版 书签 点击以下链接添加常用服务: 添加书签至主屏 Android TV可利用顺序搜索使用箭头按钮切换频道。顺序搜索引擎文件engine.search中的搜索引擎url如果不包含'%s',则搜索引擎只是简单的固定网页url,此时顺序搜索表现为频道切换。更多信息见多引擎搜索页面。 常用书签 - https://jamesfengcao.gitlab.io/uweb/zh/bookmark/ + /zh/bookmark/ Wed, 18 May 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/bookmark/ - <p>所有书签都可通过&quot;长按链接-&gt;命令-&gt;书签&quot;保存链接为书签。书签菜单可至<a href="../urls/index.html#">特色服务网页</a>安装。<br> AI/chatGPT:</p> <ul> <li><a href="https://xiezuocat.com">xiezuocat</a></li> </ul> <p>文本/文件共享</p> <ul> <li> <p><a href="https://netcut.cn">网络剪贴板</a></p> </li> <li> <p><a href="https://txtpad.cn">txtpad</a></p> </li> <li> <p><a href="https://getnote.top">getnote</a></p> </li> <li> <p><a href="https://cmd.im">cmd.im</a></p> </li> <li> <p><a href="https://flac.music.hi.cn">flac</a></p> </li> </ul> <p><a href="i:1w">Wait for url from other devices</a><br> <a href="https://www.gamezop.com">gamezop</a></p> <h3 id="分类书签模板">分类书签模板</h3> <p>点击以下链接可安装模板至分类书签目录。保存至“小说”类别的网站会自动使用阅读模式。<br> <a href="i:0hbookmark/小说.html:../searchurl/bookmark/novel.html">&quot;小说.html&quot;: 自动使用阅读模式</a></p> <p>href=&quot;i:0hbookmark/txt.html:../searchurl/bookmark/viewtxt.html&quot;&gt;&quot;txt.html&quot;: 在线阅读下载直链(txt/html)</a></p> <h3 id="镜像">镜像</h3> <p><a href="https://web.xml.wiki">google镜像</a><br> <a href="https://mirror.js.org">Google等镜像</a></p> <h3 id="termux命令书签">Termux命令书签</h3> <p>以下书签需&quot;长按以下链接-&gt;新窗口打开&quot;才能在此网页正常执行。<br> 需安装定制版termux及相应工具,<br> <a href="c:bc -l">计算器bc</a><br> <a href="c:bc -l *.bc">全能计算器bc</a></p> + /zh/bookmark/ + 所有书签都可通过&quot;长按链接-&gt;命令-&gt;书签&quot;保存链接为书签。书签菜单可至特色服务网页安装。 AI/chatGPT: kimi yuanbao taichu zhida iflow yuewen sou100 deepseek 文本/文件共享 网络剪贴板 txtpad getnote cmd.im Wait for url from other devices gamezop 分类书签模板 点击以下链接可安装模板至分类书签目录。保存至“小说”类别的网站会自动使用阅读模式。 &quot;小说.html&quot;: 自动使用阅读模式 href=&quot;i:0hbookmark/txt.html:../searchurl/bookmark/viewtxt.html&quot;&gt;&quot;txt.html&quot;: 在线阅读下载直链(txt/html) 镜像 google镜像 Google等镜像 Termux命令书签 以下书签需&quot;长按以下链接-&gt;新窗口打开&quot;才能在此网页正常执行。 需安装定制版termux及相应工具, 计算器bc 全能计算器bc 利用用户自定义样式屏蔽不良信息 - https://jamesfengcao.gitlab.io/uweb/zh/adblock_css/ + /zh/adblock_css/ Wed, 18 May 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/adblock_css/ - <p>点击以下链接可安装全局样式,清后台重启浏览器,长按底部工具条窗口按钮弹出对话框后勾选上述文件名即可屏蔽不良信息。<br> <a href="i:0hcss/floppymoose.css:http://www.floppymoose.com/userContent.css">floppymoose 广告屏蔽样式</a><br> <a href="i:0hcss/gozer.css:https://www.gozer.org/mozilla/ad_blocking/css/ad_blocking.css">gozer 广告屏蔽样式</a></p> <p><a href="../index.html#">超微浏览器</a>支持<a href="../adblock_domain/index.html">根域名屏蔽</a>,完全绝杀手机不良信息小厂。但少部分不良信息大厂本身也提供高质量的内容服务,它们可以将不良信息伪装成正常的内容从而逃脱域名绝杀。<br> 对这一部分不良信息而言,我们可以利用超微浏览器的自定义样式功能加以屏蔽。</p> + /zh/adblock_css/ + 点击以下链接可安装全局样式,清后台重启浏览器,长按底部工具条窗口按钮弹出对话框后勾选上述文件名即可屏蔽不良信息。 floppymoose 广告屏蔽样式 gozer 广告屏蔽样式 超微浏览器支持根域名屏蔽,完全绝杀手机不良信息小厂。但少部分不良信息大厂本身也提供高质量的内容服务,它们可以将不良信息伪装成正常的内容从而逃脱域名绝杀。 对这一部分不良信息而言,我们可以利用超微浏览器的自定义样式功能加以屏蔽。 CSS样式 - https://jamesfengcao.gitlab.io/uweb/zh/globalcss/ + /zh/globalcss/ Sun, 03 Apr 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/globalcss/ - <p><a href="../index.html#">超微浏览器</a>自动装载&quot;css&quot;目录下所有.css文件作为全局样式供用户选用。点击以下配置链接可自动添加为全局样式:</p> <p><a href="i:0hcss/使用默认字体.css:../searchurl/txt/clearfont.css">强制使用默认字体</a><br> <a href="i:0hcss/配合透明状态栏.css:../searchurl/txt/margintop.css">配合透明状态栏(沉浸)</a></p> <p>文件&quot;night.css&quot;为用户自定义夜间模式样式,点击以下配置链接安装不同的夜间模式:<br> <a href="i:0hnight.css:../searchurl/txt/night.css">webview 81+ 夜间模式</a><br> <a href="i:0hnight.css:../searchurl/txt/night_old.css">webview 80- 夜间模式</a></p> + /zh/globalcss/ + 超微浏览器自动装载&quot;css&quot;目录下所有.css文件作为全局样式供用户选用。点击以下配置链接可自动添加为全局样式: 强制使用默认字体 配合透明状态栏(沉浸) 文件&quot;night.css&quot;为用户自定义夜间模式样式,点击以下配置链接安装不同的夜间模式: webview 81+ 夜间模式 webview 80- 夜间模式 超微浏览器配置文件列表 - https://jamesfengcao.gitlab.io/uweb/zh/filenames/ + /zh/filenames/ Fri, 18 Mar 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/filenames/ - <p>下面列表中以&quot;/&quot;结尾者为目录,其余为文件:<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/css/">css/</a>&quot;:<a href="../globalcss/index.html#">全局样式目录</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/js/">js/</a>&quot;: <a href="../rjs/index.html#">全局脚本目录</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitejs/">sitejs/</a>&quot;:<a href="../sitejs/index.html#">类油猴脚本,针对特定网址</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitecss/">sitecss/</a>&quot;:<a href="../sitejs/index.html#">针对特定网址css样式</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/bookmarklet/">bookmarklet/</a>&quot;:js脚本目录,长按JS按钮可执行。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/offline/">offline/</a>&quot;:离线下载目录<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sbookmark/">sbookmark/</a>&quot;:超级书签默认目录<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sitecache/">sitecache/</a>&quot;:<a href="../offlinecache/index.html#">用户供应网站离线数据</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/longclick/">longclick/</a>&quot;:长按链接菜单(js)<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/icon/">icon/</a>&quot;:<a href="../icons/index.html#">图标定制</a><br> &quot;app[XXX]/&quot;:<a href="../html5/index.html#">html5应用目录</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>&quot;:长按链接菜单<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.uas">default.uas</a>&quot;:<a href="../useragents/index.html#">浏览器标识</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.urls">default.urls</a>&quot;:<a href="../urls/index.html#">特色服务</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.acmd">default.acmd</a>&quot;:<a href="../gnuplot/index.html#">浏览器地址栏功能配置</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.hosts">default.hosts</a>&quot;:<a href="../adblock/index.html#">不良信息屏蔽文件</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.redirect">default.redirect</a>&quot;:<a href="../redirect/index.html#">重定向配置</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.cmds">default.cmds</a>&quot;:<a href="../cmds/index.html#">长按“历史”按钮配置</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.link">default.link</a>&quot;:<a href="../links/index.html#">长按“书签”按钮配置</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.rjs">default.rjs</a>&quot;:<a href="../rjs/index.html#">远程及简单脚本</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.select">default.select</a>&quot;:<a href="../textprocess/index.html#">长按“链接”按钮配置</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.input">default.input</a>&quot;:每行一个网页常用输入短语<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.gesture">default.gesture</a>&quot;:格式与文件<a href="../links/index.html#">default.link</a>完全相同,定义<a href="../gesture/index.html">地址栏下方手势操作</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.gesture2">default.gesture2</a>&quot;:右边缘手势操作,类似default.gesture。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.button">default.button</a>&quot;:格式与文件<a href="../links/index.html#">default.link</a>完全相同,每行从最后一个按钮开始重定义单击功能。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.button2">default.button2</a>&quot;:类似default.button。每行从最后一个按钮开始重定义长按功能。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.filecap">default.filecap</a>&quot;:<a href="../filecap/index.html#">文件特殊处理</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.rc">default.rc</a>&quot;:如果勾选“文件预处理”,则uweb启动时运行此shell脚本。可与<a href="../tools/index.html#">tcron</a>配合运行定时任务,如存储清理、网页签到等。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.rc2">default.rc2</a>&quot;:如果勾选“文件预处理”,则uweb返回前台时运行此shell脚本。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/crontab">crontab</a>&quot;:<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/engine.search">engine.search</a>&quot;:格式同<a href="../search/index.html#">home5.search</a>,搜索引擎url仅支持%s语法。(搜索词部分用%s代替),供自动顺序搜索使用。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.siteconf">default.siteconf</a>&quot;:网站独立设置,保存ua、禁用js、无图、禁用第三方(js,可疑资源)、当前激活脚本、全局脚本。当前设置与默认不同才会保存。比如当前不屏蔽第三方js,但屏蔽第三方可疑资源,则屏蔽第三方设置与默认不同,站点设置被保存。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.playrate">default.playrate</a>&quot;:全屏播放菜单项,格式与文件<a href="../links/index.html#">default.link</a>完全相同。倍速播放菜单链接部分为空,譬如&quot;.5x:&quot;,倍速菜单至少有一个。链接部分非空的菜单必须在所有倍速菜单之后。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.autoc">default.autoc</a>&quot;:地址栏autocomplete候选字符串<br> &quot;query.autoc&quot;:主屏搜索autocomplete候选字符串<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/home5.html">home5.html</a>&quot;:自定义主屏,home6.html, home6.search, home7.html ... 多主屏(前进按钮可进)。同前缀文件中.mht文件优先于.search文件, .search文件优先于.html文件。home4.html, home3.html ... (长按后退按钮可进)。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/home5.search">home5.search</a>&quot;:<a href="../search/index.html#">主屏搜索引擎</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/home.css">home.css</a>&quot;:<a href="../searchurl/homescreen.html">主屏风格</a>,虽然后缀名为css,但其格式为html,故css代码需放在&quot;&lt;style&gt;&quot;元素内。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/bookmark.html">bookmark.html</a>&quot;:主书签<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/quickstart.html">quickstart.html</a>&quot;:快速访问<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/colors.txt">colors.txt</a>&quot;:护眼背景色<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/default.css">default.css</a>&quot;:<a href="../sitejs/index.html#">勾选网址特定样式后无匹配情形下的默认样式</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/night.css">night.css</a>&quot;:<a href="../globalcss/index.html#">夜间模式</a>,代替超微内部实现<br> &quot;bookmarklet/videoplayer.js&quot;:<a href="../video/index.html#">用户定义视频播放</a><br> &quot;<a href="file:///data/data/info.torapp.uweb/files/help_en.html">help_en.html</a>&quot;: 显示于英文手册之前。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/help_zh.html">help_zh.html</a>&quot;: 显示于中文手册之前。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/types.sniff">types.sniff</a>&quot;:嗅探类型<br> &quot;js.allow&quot;:外链js白名单,每行一个域名。<br> &quot;url.deny&quot;:需要屏蔽的url正则表达式(java语法),忽视回车,可用&quot;#&quot;开头注释。<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/sniff.log">sniff.log</a>&quot;:嗅探结果<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/history.rec">history.rec</a>&quot;:访问历史<br> &quot;<a href="file:///data/data/info.torapp.uweb/files/query.rec">query.rec</a>&quot;:查询历史</p> <p>应用内部保护目录(/data/data/info.torapp.uweb/files/):<br> &quot;shortcut/&quot;:动态shortcut刷新目录,若不存在则默认为&quot;bookmark&quot;目录。</p> + /zh/filenames/ + 下面列表中以&quot;/&quot;结尾者为目录,其余为文件: &quot;css/&quot;:全局样式目录 &quot;js/&quot;: 全局脚本目录 &quot;sitejs/&quot;:类油猴脚本,针对特定网址 &quot;sitecss/&quot;:针对特定网址css样式 &quot;bookmarklet/&quot;:js脚本目录,长按JS按钮可执行。 &quot;offline/&quot;:离线下载目录 &quot;sbookmark/&quot;:超级书签默认目录 &quot;sitecache/&quot;:用户供应网站离线数据 &quot;longclick/&quot;:长按链接菜单(js) &quot;icon/&quot;:图标定制 &quot;app[XXX]/&quot;:html5应用目录 &quot;default.longclick&quot;:长按链接菜单 &quot;default.uas&quot;:浏览器标识 &quot;default.urls&quot;:特色服务 &quot;default.acmd&quot;:浏览器地址栏功能配置 &quot;default.hosts&quot;:不良信息屏蔽文件 &quot;default.redirect&quot;:重定向配置 &quot;default.cmds&quot;:长按“历史”按钮配置 &quot;default.link&quot;:长按“书签”按钮配置 &quot;default.rjs&quot;:远程及简单脚本 &quot;default.select&quot;:长按“链接”按钮配置 &quot;default.input&quot;:每行一个网页常用输入短语 &quot;default.gesture&quot;:格式与文件default.link完全相同,定义地址栏下方手势操作 &quot;default.gesture2&quot;:右边缘手势操作,类似default.gesture。 &quot;default.button&quot;:格式与文件default.link完全相同,每行从最后一个按钮开始重定义单击功能。 &quot;default.button2&quot;:类似default.button。每行从最后一个按钮开始重定义长按功能。 &quot;default.filecap&quot;:文件特殊处理 &quot;default.rc&quot;:如果勾选“文件预处理”,则uweb启动时运行此shell脚本。可与tcron配合运行定时任务,如存储清理、网页签到等。 &quot;default.rc2&quot;:如果勾选“文件预处理”,则uweb返回前台时运行此shell脚本。 &quot;crontab&quot;: &quot;engine.search&quot;:格式同home5.search,搜索引擎url仅支持%s语法。(搜索词部分用%s代替),供自动顺序搜索使用。 &quot;default.siteconf&quot;:网站独立设置,保存ua、禁用js、无图、禁用第三方(js,可疑资源)、当前激活脚本、全局脚本。当前设置与默认不同才会保存。比如当前不屏蔽第三方js,但屏蔽第三方可疑资源,则屏蔽第三方设置与默认不同,站点设置被保存。 &quot;default.playrate&quot;:全屏播放菜单项,格式与文件default.link完全相同。倍速播放菜单链接部分为空,譬如&quot;.5x:&quot;,倍速菜单至少有一个。链接部分非空的菜单必须在所有倍速菜单之后。 &quot;default.autoc&quot;:地址栏autocomplete候选字符串 &quot;query.autoc&quot;:主屏搜索autocomplete候选字符串 &quot;home5.html&quot;:自定义主屏,home6.html, home6.search, home7.html ... 多主屏(前进按钮可进)。同前缀文件中.mht文件优先于.search文件, .search文件优先于.html文件。home4.html, home3.html ... (长按后退按钮可进)。 &quot;home5.search&quot;:主屏搜索引擎 &quot;home.css&quot;:主屏风格,虽然后缀名为css,但其格式为html,故css代码需放在&quot;&lt;style&gt;&quot;元素内。 &quot;bookmark.html&quot;:主书签 &quot;quickstart.html&quot;:快速访问 &quot;colors.txt&quot;:护眼背景色 &quot;default.css&quot;:勾选网址特定样式后无匹配情形下的默认样式 &quot;night.css&quot;:夜间模式,代替超微内部实现 &quot;bookmarklet/videoplayer.js&quot;:用户定义视频播放 &quot;types.sniff&quot;:嗅探类型 &quot;js.allow&quot;:外链js白名单,每行一个域名。 &quot;url.deny&quot;:需要屏蔽的url正则表达式(java语法),忽视回车,可用&quot;#&quot;开头注释。 &quot;sniff.log&quot;:嗅探结果 &quot;history.rec&quot;:访问历史 &quot;query.rec&quot;:查询历史 应用内部保护目录(/data/data/info.torapp.uweb/files/): &quot;shortcut/&quot;:动态shortcut刷新目录,若不存在则默认为&quot;bookmark&quot;目录。 文件管理器及文件挑选并批量处理 - https://jamesfengcao.gitlab.io/uweb/zh/filemanager/ + /zh/filemanager/ Fri, 11 Feb 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/filemanager/ - <p><a href="..">超微浏览器</a>访问以&quot;/&quot;结尾 (包括&quot;/?&quot;及后面参数)的&quot;file://&quot; url,则进入文件管理器。</p> <p>对任何目录型(以“/”结尾)文件url,后面可附&quot;?[文件前缀][*[文件后缀]]&quot;。譬如&quot;file:///sdcard/?*.png&quot;会列举出&quot;/sdcard&quot;目录下所有.png文件。&quot;?IMG&quot;列举出所有IMG开头的文件。此时可选定文件,并<a target="_self" href="i:0hcheck.js:../searchurl/txt/check.js">安装checked.js</a>对选取文件进行批量处理。</p> <p>文件批量处理配置<a href="../textprocess/index.html#">default.select</a>例子:<br> 图像缩小:checked.js:while read fname;do convert -resize %50x%50 $fname small_$fname; done</p> + /zh/filemanager/ + 超微浏览器访问以&quot;/&quot;结尾 (包括&quot;/?&quot;及后面参数)的&quot;file://&quot; url,则进入文件管理器。 对任何目录型(以“/”结尾)文件url,后面可附&quot;?[文件前缀][*[文件后缀]]&quot;。譬如&quot;file:///sdcard/?*.png&quot;会列举出&quot;/sdcard&quot;目录下所有.png文件。&quot;?IMG&quot;列举出所有IMG开头的文件。此时可选定文件,并安装checked.js对选取文件进行批量处理。 文件批量处理配置default.select例子: 图像缩小:checked.js:while read fname;do convert -resize %50x%50 $fname small_$fname; done 超级计算器(bc) - https://jamesfengcao.gitlab.io/uweb/zh/bc/ + /zh/bc/ Thu, 10 Feb 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/bc/ - <p>Gnu bc计算器支持无限精度,可扩展函数库、常数库。</p> <h3 id="安装bc-android11无需安装">安装bc (Android11+无需安装)</h3> <ul> <li>安装<a href="../searchurl/plugins.html">uweb定制Termux应用</a></li> <li>Termux下运行以下命令:<br> apt update<br> apt upgrade<br> apt install bc</li> </ul> <h3 id="使用书签调用计算器">使用书签调用计算器</h3> <p>&quot;长按以下链接-&gt;命令-&gt;书签&quot;可保存链接为书签。书签菜单可至<a href="../urls/index.html#">特色服务网页</a>安装。<br> <a href="c:bc -l">bc</a><br> <a href="c:bc -l *.bc">全能bc</a></p> <h3 id="浏览器地址栏作为超级计算器">浏览器地址栏作为超级计算器</h3> <p>配置文件default.acmd如下:<br> 计算器:text/html:echo &quot;%s&quot;|bc -l -q</p> <h3 id="更多bc扩展库">更多bc扩展库:</h3> <p>https://github.com/susca/bc-extensions<br> http://phodd.net/gnu-bc<br> http://www.numbertheory.org/gnubc/gnubc.html</p> <h3 id="使用扩展库以后defaultacmd配置如下">使用扩展库以后default.acmd配置如下:</h3> <p>计算器:text/html:echo &quot;%s&quot;|bc -l -q extensions.bc scientific_constants.bc<br> 全能计算器:text/html:echo &quot;%s&quot;|bc -l -q *.bc</p> + /zh/bc/ + Gnu bc计算器支持无限精度,可扩展函数库、常数库。 安装bc (Android11+无需安装) 安装uweb定制Termux应用 Termux下运行以下命令: apt update apt upgrade apt install bc 使用书签调用计算器 &quot;长按以下链接-&gt;命令-&gt;书签&quot;可保存链接为书签。书签菜单可至特色服务网页安装。 bc 全能bc 浏览器地址栏作为超级计算器 配置文件default.acmd如下: 计算器:text/html:echo &quot;%s&quot;|bc -l -q 更多bc扩展库: https://github.com/susca/bc-extensions http://phodd.net/gnu-bc http://www.numbertheory.org/gnubc/gnubc.html 使用扩展库以后default.acmd配置如下: 计算器:text/html:echo &quot;%s&quot;|bc -l -q extensions.bc scientific_constants.bc 全能计算器:text/html:echo &quot;%s&quot;|bc -l -q *.bc 工具栏定制 - https://jamesfengcao.gitlab.io/uweb/zh/icons/ + /zh/icons/ Sun, 06 Feb 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/icons/ - <p>超微浏览器配置目录下如果存在目录&quot;icon&quot;,则此目录下的文件名为&quot;0&quot;,&quot;1&quot;,&quot;2&quot;...<br> 会作为底部工具栏图标。文件&quot;0&quot;替换原后退按钮,&quot;1&quot;为前进按钮,&quot;2&quot;为设置按钮,&quot;3&quot;为主页按钮......。</p> <p>如果定义有新按钮(当前版本存在文件&quot;20&quot;),则uweb支持向量格式图标VectorDrawable,格式为compiled XML。此时所有图标文件必须都是compiled XML格式,或都是普通的图像格式(png,jpg,gif等)。用户可将VectorDrawable XML文件放到安卓项目目录assets下面,重新生成apk文件以后将apk文件解压即可得compiled XML格式图标文件。</p> <p>用户可定义任意多个按钮(100个按钮毫无压力),其短按长按功能可在文件default.button及default.button2中定义,格式与文件<a href="../links">default.link</a>完全相同,每行从最后一个按钮开始重定义功能。</p> <p>注意:刷新按钮及窗口按钮图标暂时不能重定义。</p> + /zh/icons/ + 超微浏览器配置目录下如果存在目录&quot;icon&quot;,则此目录下的文件名为&quot;0&quot;,&quot;1&quot;,&quot;2&quot;... 会作为底部工具栏图标。文件&quot;0&quot;替换原后退按钮,&quot;1&quot;为前进按钮,&quot;2&quot;为设置按钮,&quot;3&quot;为主页按钮......。 如果定义有新按钮(当前版本存在文件&quot;20&quot;),则uweb支持向量格式图标VectorDrawable,格式为compiled XML。此时所有图标文件必须都是compiled XML格式,或都是普通的图像格式(png,jpg,gif等)。用户可将VectorDrawable XML文件放到安卓项目目录assets下面,重新生成apk文件以后将apk文件解压即可得compiled XML格式图标文件。 用户可定义任意多个按钮(100个按钮毫无压力),其短按长按功能可在文件default.button及default.button2中定义,格式与文件default.link完全相同,每行从最后一个按钮开始重定义功能。 注意:刷新按钮及窗口按钮图标暂时不能重定义。 浏览器标识使用技巧 - https://jamesfengcao.gitlab.io/uweb/zh/useragents/ + /zh/useragents/ Sat, 01 Jan 2022 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/useragents/ - <p><a href="../index.html#">超微浏览器</a>/<a href="../../en/ebrowserreadme/index.html#">ebrowser</a>下点击配置链接可自动添加浏览器标识,强制清空后台重启后可用。<br> <a href="i:02EdgeAndroid:Mozilla/5.0 (Linux; Android 13; KB2000) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 EdgA/127.0.2610.80">Edge for android</a><br> <a href="i:02EdgeWin:Mozilla/5.0 (Windows NT 11.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Mobile Safari/537.36 Edg/127.0.2610.80">Edge for windows</a></p> <p><a href='i:02值得买:Mozilla/5.0 (Linux; Android 12.0.1; zh-cn; Pixel 6 Pro; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.46 Mobile Safari/537.36 {{ smzdm_android_V9.7.0 rv:625 (Google Pixel 6 Pro;Android12;zh) jsbv_1.0.0 webv_2.0 smzdmapp }} hap/1.6/xiaomi com.miui.hybrid/1.6.0.3 com.smzdm.quickapp/2.2.0 ({"packageName":"com.miui.quickappCenter","type":"url","extra":{"scene":"recommend"}})'>值得买</a></p> <p><a href="https://gitee.com/lemon399/user-agent-share-page/raw/master/index.html#">更多标识</a></p> + /zh/useragents/ + 超微浏览器/ebrowser下点击配置链接可自动添加浏览器标识,强制清空后台重启后可用。 Edge for android Edge for windows 更多标识 安卓系统出错诊断 - https://jamesfengcao.gitlab.io/uweb/zh/logcat/ + /zh/logcat/ Mon, 28 Dec 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/logcat/ - <p><a href="..">超微浏览器</a>如果闪退,会生成出错文件&quot;error.log&quot;。</p> <p>如果超微或安卓系统或任何应用出现问题,则可利用超微浏览器进行诊断,方法如下:</p> <ul> <li>访问<a href="../cmds/index.html#">常用命令网页</a>,点击安装logcat相关的两个命令。</li> <li>清空后台并重启超微浏览器。</li> <li>长按历史按钮,执行命令&quot;清空logcat&quot;。</li> <li>触发有问题的功能。</li> <li>长按历史按钮,执行命令&quot;输出logcat.log&quot;.</li> <li>检查文件&quot;logcat.log&quot;内容。</li> </ul> <p>超微浏览器是手机上调试javascript脚本的最佳工具,无需打包就可有多种方式运行javascript代码。webview dev版自带devtools,运行此工具,打开flag &quot;webview-log-js-console-messages&quot;以后所有js出错信息及console输出会被复制到logcat中。然后用户可根据上一段所述方法诊断。</p> <p>非dev版本webview可点击如下链接运行devtools。<br> <a href="i:16:com.android.webview.SHOW_DEV_UI:com.google.android.webview:org.chromium.android_webview.devui.MainActivity">devtools for com.google.android.webview</a></p> <p><a href="i:16:com.android.webview.SHOW_DEV_UI:com.android.webview:org.chromium.android_webview.devui.MainActivity">devtools for com.android.webview</a></p> + /zh/logcat/ + 超微浏览器如果闪退,会生成出错文件&quot;error.log&quot;。 如果超微或安卓系统或任何应用出现问题,则可利用超微浏览器进行诊断,方法如下: 访问常用命令网页,点击安装logcat相关的两个命令。 清空后台并重启超微浏览器。 长按历史按钮,执行命令&quot;清空logcat&quot;。 触发有问题的功能。 长按历史按钮,执行命令&quot;输出logcat.log&quot;. 检查文件&quot;logcat.log&quot;内容。 超微浏览器是手机上调试javascript脚本的最佳工具,无需打包就可有多种方式运行javascript代码。webview dev版自带devtools,运行此工具,打开flag &quot;webview-log-js-console-messages&quot;以后所有js出错信息及console输出会被复制到logcat中。然后用户可根据上一段所述方法诊断。 非dev版本webview可点击如下链接运行devtools。 devtools for com.google.android.webview devtools for com.android.webview 离线下载 - https://jamesfengcao.gitlab.io/uweb/zh/loadbt/ + /zh/loadbt/ Tue, 15 Dec 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/loadbt/ - <ul> <li>seedr用户可使用<a href="../links/index.html#">常用链接</a>利用seedr离线下载。使用时长按链接-&gt;命令-&gt;seedr离线...。</li> <li>Telegram用户可使用<a href="../urls/index.html#">特色服务</a>利用tg bot离线下载至bot支持网盘。使用时长按链接-&gt;命令-&gt;tg...。</li> </ul> <p>百度网盘存储空间大,但其离线下载限制很多,可能由于某些重要节点被屏蔽的原因,下载国外资料基本都会失败。国外离线网盘空间小,但下载成功率很高。<br> 本文介绍一种技术,使用国外离线网盘下载资源,然后一键离线至百度网盘。</p> <p><a href="../index.html#">超微浏览器</a>上配置百度离线下载</p> <ul> <li> <p>安装<a href="../searchurl/plugins.html">uweb定制Termux应用</a>。</p> </li> <li> <p>安装baidupcs-go:</p> <ul> <li>直接下载<a href="https://github.com/felixonmars/BaiduPCS-Go/releases">BaiduPCS-Go</a>,安卓手机请选择arm64版本。</li> <li>解压下载文件</li> <li>移动解压后文件至最终目的地。Termux运行以下命令:<br> <code>mv BaiduPCS-Go /data/data/com.termux/files/usr/bin/.<br> chmod 777 /data/data/com.termux/files/usr/bin/BaiduPCS-Go<br> </code></li> </ul> </li> <li> <p>登录百度网盘, Termux执行如下命令:<br> BaiduPCS-Go login<br> BaiduPCS-Go config set -appid=266719</p> </li> <li> <p>default.longclick配置如下:<br> 百度离线下载:termux/*:BaiduPCS-Go od add &quot;%u&quot;;exit 1</p> </li> <li> <p>重启超微浏览器,此时长按链接将会出现菜单“百度离线下载”。</p> </li> <li> <p>离线下载资源至国外网盘,下载完成后在超微浏览器内点击资源下载,弹出菜单选择“百度离线下载”,完成整个流程。</p> </li> <li> <p>其它支持离线下载的网页也可<a href="../longclick">定义为一键离线</a>。</p> </li> </ul> + /zh/loadbt/ + seedr用户可使用常用链接利用seedr离线下载。使用时长按链接-&gt;命令-&gt;seedr离线...。 Telegram用户可使用特色服务利用tg bot离线下载至bot支持网盘。使用时长按链接-&gt;命令-&gt;tg...。 百度网盘存储空间大,但其离线下载限制很多,可能由于某些重要节点被屏蔽的原因,下载国外资料基本都会失败。国外离线网盘空间小,但下载成功率很高。 本文介绍一种技术,使用国外离线网盘下载资源,然后一键离线至百度网盘。 超微浏览器上配置百度离线下载 安装uweb定制Termux应用。 安装baidupcs-go: 直接下载BaiduPCS-Go,安卓手机请选择arm64版本。 解压下载文件 移动解压后文件至最终目的地。Termux运行以下命令: mv BaiduPCS-Go /data/data/com.termux/files/usr/bin/. chmod 777 /data/data/com.termux/files/usr/bin/BaiduPCS-Go 登录百度网盘, Termux执行如下命令: BaiduPCS-Go login BaiduPCS-Go config set -appid=266719 default.longclick配置如下: 百度离线下载:termux/*:BaiduPCS-Go od add &quot;%u&quot;;exit 1 重启超微浏览器,此时长按链接将会出现菜单“百度离线下载”。 离线下载资源至国外网盘,下载完成后在超微浏览器内点击资源下载,弹出菜单选择“百度离线下载”,完成整个流程。 其它支持离线下载的网页也可定义为一键离线。 + + + 长按链接弹出菜单 + /zh/longclick/ + Fri, 06 Nov 2020 00:00:00 +0000 + /zh/longclick/ + 长按链接运行第三方程序 配置文件default.longclick每行格式如下(同default.cmds) 菜单名:mimetype:命令路径 命令可以包含%c(当前网址cookie)等,执行时会被相应内容自动替换。 长按链接运行js文件 长按链接弹出菜单显示longclick目录下所有js文件供用户挑选执行。 js文件格式如下: 首行可以&quot;//&quot;开头,后面紧跟目标网页url,url中可包含&quot;%u&quot;等,打开网页时会用长按的链接替换。 首行非&quot;//&quot;开头者,整个脚本作用于当前网页,不再打开新网页。 第二行开始为javascript代码,代码中可用arguments来获取參数。其中arguments[1]为长按的链接; arguments[2]为长按链接的文字描述; arguments[0]为js文件名。 视频播放小窍门 - https://jamesfengcao.gitlab.io/uweb/zh/video/ + /zh/video/ Tue, 22 Sep 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/video/ - <p><a href="i:0hdefault.playrate::1x:%0A旋转屏幕::0004%0Aexit:%20document.exitFullscreen()%0A">覆盖安装全屏播放菜单示例:屏幕旋转,退出</a></p> <p>本文以<a href="../index.html#">超微浏览器</a>为例来说明。</p> <ul> <li>创建文件&quot;default.playrate&quot;可定制全屏倍速播放菜单项,格式与文件<a href="../links/index.html#">default.link</a>完全相同。倍速播放菜单链接部分为空,譬如&quot;.5x:&quot;,倍速菜单至少有一个。链接部分非空的菜单必须在所有倍速菜单之后。</li> <li>长按设置按钮勾选“弹出视频地址”,则视频播放时会弹出真正的播放地址,点击地址播放可避免一切不良信息。如果点击后为下载操作,可长按链接分享给视频播放器。用户亦可<a href="../filecap/index.html#">配置在线播放</a>或<a href="../searchurl/plugins.html">安装插件</a>。嗅探的视频/资源类型可由文件“types.sniff”控制。</li> <li>很多视频解析结果在UA为PC的情况下非常干净,没什么不良信息。故用户可在播放前切换UA至PC。如:wn.run/解析结果对PC非常干净。</li> <li>某些视频网站在全屏播放时都会出现不良信息占住屏幕一部分。点击全屏播放之前,长按[☰]按钮,超微浏览器将弹出全局脚本菜单,勾选“移除浮动不良信息”后再点全屏播放则完美播放。</li> <li>也可利用全屏播放屏蔽一切不良信息。方法如下: <ul> <li>长按[☰]按钮,勾选“全屏视频”。此选项将让无法全屏播放的网站强制允许全屏播放。</li> </ul> </li> <li>对无法全屏、无法放大的视频网站,可长按[☰]按钮,勾选“强制缩放”,然后手动放大至全屏。</li> <li>灵活应用JS、图像开关屏蔽一切不良信息:视频搜索前关闭JS开关,进入播放网页前关闭图像显示并打开JS。</li> <li>视频解析之电视剧: 首先在视频网站搜索电视剧片名,下面会显示不同的剧集,点击它们再用视频解析即可观看。如果直接点击电视剧用视频解析则每次播放均为第一集。</li> </ul> <p><a href="../searchcat/index.html#">视频搜索预配置(超过400个引擎)</a></p> <p>视频资源:</p> <ul> <li><a href="../urls">视频解析配置</a></li> <li><a href="https://www.nbwz.com">nbwz</a></li> <li><a href="https://www.mvcat.com">mvcat</a></li> <li><a href="https://www.novipnoad.com">novip</a></li> <li><a href="https://www.bdys.me">bdys</a></li> <li><a href="https://z2py.com">z2py</a></li> <li><a href="https://ddrk.me">ddrk</a></li> <li><a href="https://www.nfmovies.com">nfmovies</a></li> <li><a href="../tvlive">电视直播</a></li> <li><a href="http://www.okzyw.com/">OK资源</a></li> <li><a href="http://bddn.cn/zb.htm">全国电视直播</a></li> <li><a href="https://adzhp.cn/mian-fei-shi-pin.html">免费视频</a></li> <li><a href="https://adzhp.cn/guo-wai-ju.html">国外剧</a></li> <li><a href="https://adzhp.cn/ji-lu-pian.html">纪录片</a></li> <li><a href="https://adzhp.cn/wang-luo-zhi-bo.html">网络直播</a></li> </ul> <p><a target="_self" href="i:0hbookmarklet/videoplayer.js:../searchurl/txt/videoplay.js">点击安装&quot;视频播放增强(倍速等),635+版本功能已内置,仅供高级用户定制参考。&quot;</a></p> + /zh/video/ + 覆盖安装全屏播放菜单示例:屏幕旋转,退出 本文以超微浏览器为例来说明。 创建文件&quot;default.playrate&quot;可定制全屏倍速播放菜单项,格式与文件default.link完全相同。倍速播放菜单链接部分为空,譬如&quot;.5x:&quot;,倍速菜单至少有一个。链接部分非空的菜单必须在所有倍速菜单之后。 长按设置按钮勾选“弹出视频地址”,则视频播放时会弹出真正的播放地址,点击地址播放可避免一切不良信息。如果点击后为下载操作,可长按链接分享给视频播放器。用户亦可配置在线播放或安装插件。嗅探的视频/资源类型可由文件“types.sniff”控制。 很多视频解析结果在UA为PC的情况下非常干净,没什么不良信息。故用户可在播放前切换UA至PC。如:wn.run/解析结果对PC非常干净。 某些视频网站在全屏播放时都会出现不良信息占住屏幕一部分。点击全屏播放之前,长按[☰]按钮,超微浏览器将弹出全局脚本菜单,勾选“移除浮动不良信息”后再点全屏播放则完美播放。 也可利用全屏播放屏蔽一切不良信息。方法如下: 长按[☰]按钮,勾选“全屏视频”。此选项将让无法全屏播放的网站强制允许全屏播放。 对无法全屏、无法放大的视频网站,可长按[☰]按钮,勾选“强制缩放”,然后手动放大至全屏。 灵活应用JS、图像开关屏蔽一切不良信息:视频搜索前关闭JS开关,进入播放网页前关闭图像显示并打开JS。 视频解析之电视剧: 首先在视频网站搜索电视剧片名,下面会显示不同的剧集,点击它们再用视频解析即可观看。如果直接点击电视剧用视频解析则每次播放均为第一集。 视频搜索预配置(超过400个引擎) 视频资源: 视频解析配置 nbwz mvcat novip bdys z2py ddrk nfmovies 电视直播 OK资源 全国电视直播 免费视频 国外剧 纪录片 网络直播 点击安装&quot;视频播放增强(倍速等),635+版本功能已内置,仅供高级用户定制参考。&quot; 工具汇总 - https://jamesfengcao.gitlab.io/uweb/zh/tools/ + /zh/tools/ Sun, 06 Sep 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/tools/ - <p>本文以<a href="../index.html#">超微浏览器</a>为例来说明。</p> <h4 id="安装tdict检索工具-本地检索远程内容"><a href="i:0bhttps://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/tdict_loc.tar.gz">安装tdict检索工具 (本地检索,远程内容)</a></h4> <p>安装完tdict本地检索工具后,可选择性安装字典索引及对应的搜索引擎至主屏。以下引擎仅作测试使用。<br> <a href="i:0hahd.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/ahd.tidx">安装双解字典索引</a><br> <del><a href="i:00AHD:d:text/html:tdict_loc ahd \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/HxY9QT5cdp63ZPK/download?path=%2F&files=ahd.dict\':">安装双解字典至主屏</a></del></p> <p><a href="i:0henja.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/enja.tidx">英语活用大词典索引</a><br> <del><a href="i:00英语活用:d:text/html:tdict_loc enja \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=enja.dict\':">安装英语活用至主屏</a></del></p> <p><a href="i:0hhy.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/hy.tidx">汉语大词典索引</a><br> <del><a href="i:00汉语大词典:d:text/html:tdict_loc hy \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=hy.dict\':">安装汉语词典至主屏</a></del></p> <p><a href="i:0hsoed.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/soed.tidx">soed6索引</a><br> <del><a href="i:00soed:d:text/html:tdict_loc soed \'%s\'|loc2html text/plain \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=soed.dict\':">安装soed至主屏</a></del></p> <p>以下字典最好安装markdown处理器。<br> <a href="i:0hmd.html:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/txt/mdme.html">安装markdown处理器</a><br> <a href="i:0hmwi.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/mwi.tidx">Merriam Webster International Unabridged 索引</a><br> <del><a href="i:00mwi:d:text/html:tdict_loc mwi \'%s\'|loc2html text/html.md.html \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=mwi.dict\':">安装mwi至主屏</a></del></p> <p><a href="i:0hode3.tidx:https://fastly.jsdelivr.net/gh/torappinfo/uwebjs/bin/ode3.tidx">ode3索引</a><br> <del><a href="i:00ode:d:text/html:tdict_loc ode3 \'%s\'|loc2html text/html.md.html \'https://s1.asytech.cn/s/oaoGniEBKLnWzoj/download?path=%2F&files=ode3.dict\':">安装ode至主屏</a></del></p> <p>以下工具需先安装<a href="../searchurl/plugins.html">uweb定制Termux应用</a>,并启动一次完成初始化。</p> <h4 id="安装tdict词典工具"><a href="i:0bhttp://fastly.jsdelivr.net/gh/torappinfo/uweb/zh/searchurl/bin/tdict.tar.gz">安装tdict词典工具</a></h4> <p>安装完tdict词典工具以后,对dict目录下的汉语大字典文件如&quot;dictXXX.xz&quot;可在主屏.search文件配置如下字典查询:<br> 汉语大字典:c:zd xz %s dictXXX</p> <p>字典文件目录可通过修改termux下“~/share”符号链接来改动。也可使用其它压缩方式如zst,此时配置变为&quot;zd zst %s dictXXX&quot;,相应的字典文件名为dictXXX.zst。用户需提供zsttool工具解压文本。</p> <p><a href="../searchurl/plugins.html">插件页面</a>也提供了词典方案,但如果手动配置会比较麻烦。</p> + /zh/tools/ + 本文以超微浏览器为例来说明。 安装tdict检索工具 (本地检索,远程内容) 安装完tdict本地检索工具后,可选择性安装字典索引及对应的搜索引擎至主屏。以下引擎仅作测试使用。 安装双解字典索引 安装双解字典至主屏 英语活用大词典索引 安装英语活用至主屏 汉语大词典索引 安装汉语词典至主屏 soed6索引 安装soed至主屏 以下字典最好安装markdown处理器。 安装markdown处理器 Merriam Webster International Unabridged 索引 安装mwi至主屏 ode3索引 安装ode至主屏 oed索引 安装oed至主屏 大英百科索引 安装be至主屏 以下工具需先安装uweb定制Termux应用,并启动一次完成初始化。 安装tdict词典工具 安装完tdict词典工具以后,对dict目录下的汉语大字典文件如&quot;dictXXX.xz&quot;可在主屏.search文件配置如下字典查询: 汉语大字典:c:zd xz %s dictXXX 字典文件目录可通过修改termux下“~/share”符号链接来改动。也可使用其它压缩方式如zst,此时配置变为&quot;zd zst %s dictXXX&quot;,相应的字典文件名为dictXXX.zst。用户需提供zsttool工具解压文本。 插件页面也提供了词典方案,但如果手动配置会比较麻烦。 利用文件预处理预览/查看/播放可下载资源 - https://jamesfengcao.gitlab.io/uweb/zh/filecap/ + /zh/filecap/ Mon, 24 Aug 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/filecap/ - <p>技巧等级:中级</p> <p>文件预处理配置文件为default.filecap,每行格式如下:<br> [文件后缀]:[mimetype]:[处理命令]</p> <p>其中文件后缀可允许最多两段后缀,譬如&quot;txt.xz&quot;,&quot;html.gz&quot;。<br> mimetype表示命令处理后的输出内容格式。<br> 处理命令与<a href="../cmds/index.html#">default.cmds</a>相同,主要可能用到如下替换:<br> %u(网址或文件路径)、%U(编码以后的网址)、%c(当前网址cookie)、%p(密码保护网站中的密码,curl格式)。</p> <p>利用文件预处理,<a href="../index.html#">超微浏览器</a>现在可以预览/查看/播放一切可下载资源,并且可以利用不同网站在线服务预览不同的文件,而手机上一个应用都不用装。</p> <p>配置default.filecap如下:</p> <pre><code>txt:text/html:curl %p "%u" mp3:text/html:echo '&lt;audio controls width=100% height=100%>&lt;source src="%u">&lt;/audio>' m4b:text/html:echo '&lt;audio controls width=100% height=100%>&lt;source src="%u">&lt;/audio>' m3u8:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' mp4:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' mkv:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' doc:uweb:echo https://view.xdocin.com/view?src=%U xls:uweb:echo https://view.xdocin.com/view?src=%U ppt:uweb:echo https://view.xdocin.com/view?src=%U docx:uweb:echo https://view.xdocin.com/view?src=%U xlsx:uweb:echo https://view.xdocin.com/view?src=%U pptx:uweb:echo https://view.xdocin.com/view?src=%U xz:text/plain:curl %p "%u"|xz -d --</code></pre> <p>安装过相应的<a href="../html5/index.html#">html5应用</a>,则如下配置阅读相应格式文件:</p> <pre><code>pdf:uweb:echo file:///data/data/info.torapp.uweb/files/app/pdf.js/web/viewer.html?file=%u djvu:uweb:echo file:///data/data/info.torapp.uweb/files/app/djvu.html?url=%u epub:uweb:echo file:///data/data/info.torapp.uweb/files/app/reader/index.html#?bookPath==%u</code></pre> <p>长按设置按钮,勾选“文件预处理”,清后台重启浏览器。则网页上点击下载按钮时上述文件类型会自动预览。</p> <p>如果用户配置中处理命令用到curl,则需要安装<a href="../gnuplot/index.html#">Termux</a>,并在Termux中安装curl (&quot;apt install curl&quot;)。<br> 如果用户不安装Termux,则上述配置命令中的&quot;am&quot;需要全部路径,需用&quot;/system/bin/am&quot;替换。</p> <p>使用微软服务预览office文档 (https://view.officeapps.live.com/op/view.aspx?src=)必需当前UA为PC,否则会出现空白页面。有条件的用户建议使用google docs (&quot;http://docs.google.com/gview?embedded=true&amp;url=&quot;) 服务替换。</p> + /zh/filecap/ + 技巧等级:中级 文件预处理配置文件为default.filecap,每行格式如下: [文件后缀]:[mimetype]:[处理命令] 其中文件后缀可允许最多两段后缀,譬如&quot;txt.xz&quot;,&quot;html.gz&quot;。 mimetype表示命令处理后的输出内容格式。 处理命令与default.cmds相同,主要可能用到如下替换: %u(网址或文件路径)、%U(编码以后的网址)、%c(当前网址cookie)、%p(密码保护网站中的密码,curl格式)。 利用文件预处理,超微浏览器现在可以预览/查看/播放一切可下载资源,并且可以利用不同网站在线服务预览不同的文件,而手机上一个应用都不用装。 配置default.filecap如下: txt:text/html:curl %p "%u" mp3:text/html:echo '&lt;audio controls width=100% height=100%>&lt;source src="%u">&lt;/audio>' m4b:text/html:echo '&lt;audio controls width=100% height=100%>&lt;source src="%u">&lt;/audio>' m3u8:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' mp4:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' mkv:text/html:echo '&lt;video controls width=100% height=100%>&lt;source src="%u">&lt;/video>' doc:uweb:echo https://view.xdocin.com/view?src=%U xls:uweb:echo https://view.xdocin.com/view?src=%U ppt:uweb:echo https://view.xdocin.com/view?src=%U docx:uweb:echo https://view.xdocin.com/view?src=%U xlsx:uweb:echo https://view.xdocin.com/view?src=%U pptx:uweb:echo https://view.xdocin.com/view?src=%U xz:text/plain:curl %p "%u"|xz -d -- 安装过相应的html5应用,则如下配置阅读相应格式文件: pdf:uweb:echo file:///data/data/info.torapp.uweb/files/app/pdf.js/web/viewer.html?file=%u djvu:uweb:echo file:///data/data/info.torapp.uweb/files/app/djvu.html?url=%u epub:uweb:echo file:///data/data/info.torapp.uweb/files/app/reader/index.html#?bookPath==%u 长按设置按钮,勾选“文件预处理”,清后台重启浏览器。则网页上点击下载按钮时上述文件类型会自动预览。 如果用户配置中处理命令用到curl,则需要安装Termux,并在Termux中安装curl (&quot;apt install curl&quot;)。 手势 - https://jamesfengcao.gitlab.io/uweb/zh/gesture/ + /zh/gesture/ Thu, 18 Jun 2020 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/gesture/ - <p>顶部下拉弹出地址栏; 顶部上划隐藏地址栏。底部下划隐藏工具条; 底部左右角落划动弹出工具条。</p> <p>紧靠工具条左右划动切换当前窗口; 左右大幅度划动切换到第一或最后一个窗口。</p> <p>起点终点紧靠地址栏划动操作调用&quot;default.gesture&quot;文件中对应链接。文件格式与文件<a href="../links/index.html#">default.link</a>完全相同。每行第一部分为助记名,第二部分为链接。手势操作对应方式如下:</p> <ol> <li>将屏幕宽度平分为三部分,分别对应数字0,1,2</li> <li>将终点对应的屏幕数字加上起点对应数字的三倍。如果数字为4且初始为往左滑动则数字改为9。</li> <li>每额外多一次来回转折数字加10。<br> 超微浏览器将执行上述数字所对应行所定义的链接操作。(0对应第一行,以此类推)</li> </ol> <p>右边缘划动操作调用&quot;default.gesture2&quot;文件中对应链接。对应方法同&quot;default.gesture&quot;。</p> <p>常用操作链接:<br> back:javascript:history.back()<br> forward:javascript:history.forward()<br> back2:javascript:history.go(-2)</p> + /zh/gesture/ + 顶部下拉弹出地址栏; 顶部上划隐藏地址栏。底部下划隐藏工具条; 底部左右角落划动弹出工具条。 紧靠工具条左右划动切换当前窗口; 左右大幅度划动切换到第一或最后一个窗口。 起点终点紧靠地址栏划动操作调用&quot;default.gesture&quot;文件中对应链接。文件格式与文件default.link完全相同。每行第一部分为助记名,第二部分为链接。手势操作对应方式如下: 将屏幕宽度平分为三部分,分别对应数字0,1,2 将终点对应的屏幕数字加上起点对应数字的三倍。如果数字为4且初始为往左滑动则数字改为9。 每额外多一次来回转折数字加10。 超微浏览器将执行上述数字所对应行所定义的链接操作。(0对应第一行,以此类推) 右边缘划动操作调用&quot;default.gesture2&quot;文件中对应链接。对应方法同&quot;default.gesture&quot;。 常用操作链接: back:javascript:history.back() forward:javascript:history.forward() back2:javascript:history.go(-2) 一键执行预定义命令 - https://jamesfengcao.gitlab.io/uweb/zh/cmd/ + /zh/cmd/ Sat, 20 Jan 2018 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/cmd/ - <p>技巧等级:中级 PC剪贴板(高级)</p> <p><a href="../index.html#">uweb浏览器</a>支持一键执行任意预定义命令,这些命令可以与剪贴板交互,可以将结果(文本、图像、音视频)输出到浏览器窗口。</p> <p>手机推荐安装uweb定制<a href="../gnuplot/index.html#">Termux</a>,否则能够执行的命令极其有限。</p> <p>预定义命令保存在文件&quot;default.cmds&quot;中。重启浏览器,长按历史按钮,超微将弹出菜单供用户点击执行。</p> <p>资深用户可能注意到文件名与<a href="../gnuplot/index.html#">default.acmd</a>类似。default.acmd中的命令适合以不同的参数反复执行;而default.cmds一般以单次执行为多。default.acmd结果会显示在浏览器当前窗口;而default.cmds中命令执行结果会显示在新窗口之中。这两个文件格式也完全相同,每行格式如下:<br> [命令名称]:[mimetype]:[命令代码]</p> <p>命令代码可以是任意命令,其中可以包含%c(当前网址cookie)、%s (地址栏输入)、 %t (当前窗口标题)、 %u (当前窗口url或文件路径)。执行时这些特殊标识将会被相应内容自动替换。</p> <p>mimetype用来表示命令的输出类型。除了标准的mimetype之外,超微对此还作了扩充,便利与剪贴板交互。下面是扩充版的mimetype:<br> &quot;clip/clip&quot; : 以剪贴板作为命令输入,输出结果复制到剪贴板。<br> &quot;/clip&quot; : 输出结果复制到剪贴板。<br> &quot;clip/text/html&quot; : 以剪贴板作为命令输入,输出结果mimetype类型为“text/html”。<br> &quot;termux/*&quot;: 在termux中执行命令。<br> &quot;/uweb&quot;: 输出结果作为<a href="../links/index.html#">链接</a>来处理。</p> <p>下面是笔者使用的default.cmds配置(<a href="../textprocess/index.html#">命令具体解释</a>):</p> <pre>复制手机剪贴板至PC剪贴板:clip:ssh [user:password]@192.168.2.102 "DISPLAY=:0 xsel -i" PC剪贴板至手机剪贴板:/clip:ssh [user:password]@192.168.2.102 "DISPLAY=:0 xsel -o" </pre> + /zh/cmd/ + 技巧等级:中级 PC剪贴板(高级) uweb浏览器支持一键执行任意预定义命令,这些命令可以与剪贴板交互,可以将结果(文本、图像、音视频)输出到浏览器窗口。 手机推荐安装uweb定制Termux,否则能够执行的命令极其有限。 预定义命令保存在文件&quot;default.cmds&quot;中。重启浏览器,长按历史按钮,超微将弹出菜单供用户点击执行。 资深用户可能注意到文件名与default.acmd类似。default.acmd中的命令适合以不同的参数反复执行;而default.cmds一般以单次执行为多。default.acmd结果会显示在浏览器当前窗口;而default.cmds中命令执行结果会显示在新窗口之中。这两个文件格式也完全相同,每行格式如下: [命令名称]:[mimetype]:[命令代码] 命令代码可以是任意命令,其中可以包含%c(当前网址cookie)、%s (地址栏输入)、 %t (当前窗口标题)、 %u (当前窗口url或文件路径)。执行时这些特殊标识将会被相应内容自动替换。 mimetype用来表示命令的输出类型。除了标准的mimetype之外,超微对此还作了扩充,便利与剪贴板交互。下面是扩充版的mimetype: &quot;clip/clip&quot; : 以剪贴板作为命令输入,输出结果复制到剪贴板。 &quot;/clip&quot; : 输出结果复制到剪贴板。 &quot;clip/text/html&quot; : 以剪贴板作为命令输入,输出结果mimetype类型为“text/html”。 &quot;termux/*&quot;: 在termux中执行命令。 &quot;/uweb&quot;: 输出结果作为链接来处理。 下面是笔者使用的default.cmds配置(命令具体解释): 复制手机剪贴板至PC剪贴板:clip:ssh [user:password]@192.168.2.102 "DISPLAY=:0 xsel -i" PC剪贴板至手机剪贴板:/clip:ssh [user:password]@192.168.2.102 "DISPLAY=:0 xsel -o" 分类多引擎搜索 - https://jamesfengcao.gitlab.io/uweb/zh/searchcat/ + /zh/searchcat/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/searchcat/ - <p><a href="..">超微浏览器</a>中通过“设置”-&gt;“总目录”-&gt;“↑”-&gt;“Download”,点击后缀为.search的下载文件,超微浏览器将自动显示分类多引擎搜索。此时可按菜单键(或长按底部工具条后退按钮)选择“添加到桌面”方便以后访问。</p> <p>.search文件每行格式为如下几种:<br> [搜索引擎名]:[不含%s的url]<br> [搜索引擎名]:[含%s的url]<br> [搜索引擎名]:POST:[含%s的post参数]:[url]<br> [Engine name]:[Extra request headers]:[post params with '%s' as keyword]:[url]</p> <ul> <li>[Extra request headers] Ex. &quot;X-Forwarded-For;8.8.8.8&quot;</li> <li>when [post params] is empty, the url should have '%s' as keyword. Ex. <a href="../search/index.html#">search engines</a></li> </ul> <p>.search文件首行必须为含或不含%s的url(前面两类)。由于其它类型的引擎数量稀少,为性能考虑,超微限制了首个引擎的种类。<br> 用&quot;i:&quot;等超微内部scheme作开头的搜索引擎,关键词部分仅支持使用&quot;%s&quot;,这纯粹是为了降低代码复杂性。</p> <h4 id="本地引擎">本地引擎</h4> <p>搜索引擎已经支持命令行url,现在可添加离线字典查询至主页。命令行url格式为<br> c:[含%s的命令行]<br> d:mimetype:[含%s的命令行]:[外部资源url]<br> 查询时关键词会自动替换命令行中的%s。</p> <p>笔者用来查询各式词典,发现效果非常好。百兆以内的文本文件压缩以后可以直接快速检索,定位至特定位置以后可上下滚动阅读全部文本。</p> + /zh/searchcat/ + 点击本链接自动安装分类多引擎文件至&quot;bookmark&quot;目录下。 超微浏览器中通过“设置”-&gt;“总目录”-&gt;“↑”-&gt;“Download”,点击后缀为.search的下载文件,超微浏览器将自动显示分类多引擎搜索。此时可按菜单键(或长按底部工具条后退按钮)选择“添加到桌面”方便以后访问。 .search文件每行格式为如下几种: [搜索引擎名]:[不含%s的url] [搜索引擎名]:[含%s的url] [搜索引擎名]:POST:[含%s的post参数]:[url] [Engine name]:[Extra request headers]:[post params with '%s' as keyword]:[url] [Extra request headers] Ex. &quot;X-Forwarded-For;8.8.8.8&quot; when [post params] is empty, the url should have '%s' as keyword. Ex. bingUS engine w/ chatgpt .search文件首行必须为第一种类型的搜索引擎。由于其它类型的引擎数量稀少,为性能考虑,超微限制了首个引擎的种类。 用&quot;i:&quot;等超微内部scheme作开头的搜索引擎,关键词部分仅支持使用&quot;%s&quot;,这纯粹是为了降低代码复杂性。 本地引擎 搜索引擎已经支持命令行url,现在可添加离线字典查询至主页。命令行url格式为 c:[含%s的命令行] d:mimetype:[含%s的命令行]:[外部资源url] 查询时关键词会自动替换命令行中的%s。 笔者用来查询各式词典,发现效果非常好。百兆以内的文本文件压缩以后可以直接快速检索,定位至特定位置以后可上下滚动阅读全部文本。 加速国外网站访问 - https://jamesfengcao.gitlab.io/uweb/zh/hosts/ + /zh/hosts/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/hosts/ - <p>不少国外网站本身虽可访问,但由于网站需要下载其它网址的资源而导致无法访问。根域名屏蔽可屏蔽文件中域名的一切子域名、孙域名、......,从而主动排除这些网址,最终允许浏览器快速访问。</p> <p>使用Android端<a href="..">uweb浏览器</a>。<br> 域名文件 <a href="../adblock_domain/index.html#">&quot;default.hosts&quot;</a> 内容如下:<br> googleadservices.com<br> googlesyndication.com<br> adsense.com<br> googleapis.com<br> google-analytics.com<br> googletagservices.com<br> facebook.com<br> fbcdn.net</p> <p>其它国外网址访问技巧:</p> <ul> <li>尝试关闭javascript, 譬如程序员网站stackoverflow.com在关闭javascript的情况下国内一般均可快速访问。</li> <li>关闭网页图片</li> <li><a href="../redirect/index.html#">重定向网址</a>:包括重定向至国内镜像以及全局重定向。</li> </ul> + /zh/hosts/ + 不少国外网站本身虽可访问,但由于网站需要下载其它网址的资源而导致无法访问。根域名屏蔽可屏蔽文件中域名的一切子域名、孙域名、......,从而主动排除这些网址,最终允许浏览器快速访问。 使用Android端uweb浏览器。 域名文件 &quot;default.hosts&quot; 内容如下: googleadservices.com googlesyndication.com adsense.com googleapis.com google-analytics.com googletagservices.com facebook.com fbcdn.net 其它国外网址访问技巧: 尝试关闭javascript, 譬如程序员网站stackoverflow.com在关闭javascript的情况下国内一般均可快速访问。 关闭网页图片 重定向网址:包括重定向至国内镜像以及全局重定向。 绝杀完整域名树 - https://jamesfengcao.gitlab.io/uweb/zh/adblock_domain/ + /zh/adblock_domain/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/adblock_domain/ - <p><a href="file:///data/data/info.torapp.uweb/files/default.hosts">域名文件</a>可屏蔽文件中域名的一切子域名、孙域名、......,可彻底绝杀一切不良信息。所以用户屏蔽根域名时无需选择提示中出现的整个域名,<span style="color:red">只需选取最后两段或三段</span>(最后两段不超过6字符如com.cn的域名可取四段)。</p> <ul> <li> <p>可使用<a href="../bookmarklet/index.html#">列出外部脚本小书签</a>生成外部js文件列表,然后长按底部工具栏&quot;js&quot;按钮,执行&quot;网址转链接&quot;菜单命令,长按可疑链接(一般为域名不同的外链),执行“屏蔽根域名”。</p> </li> <li> <p>长按不良信息链接,点击“图片:屏蔽根域名”,修改弹出域名,一般取最后两段,点击&quot;确定&quot;屏蔽当前图片网址。</p> </li> <li> <p>部分不良信息没有链接可长按,或虽有链接但长按时不出现图片相关菜单。此时可长按[JS]点击&quot;背景图片&quot;或&quot;看图模式&quot;,再长按不良信息链接点击“图片:屏蔽根域名”,屏蔽图片网址。</p> </li> <li> <p>可长按设置开启&quot;资源嗅探&quot;,推荐设置文件&quot;types.sniff&quot;内容为js,刷新网页后关闭&quot;资源嗅探&quot;选项。在弹出的资源网页上长按链接,屏蔽根域名。</p> </li> <li> <p>(可选) 长按不良信息链接,点击“屏蔽根域名”,屏蔽链接网址。</p> </li> <li> <p>(可选) 某些不良信息靠javascript激发,链接中不出现域名,可点击激发至新网址后将新网址根域名屏蔽。</p> </li> <li> <p>支持域名及整个网址正则表达式<br> 文件格式每行如下:<br> 根域名[空格]域名前缀正则表达式[空格]整个网址去掉协议部分后正则表达式<br> 空格及后面两个正则表达式为可选择项。正则表达式采用java标准。<br> 如果用到了第二个正则表达式,此时将域名前缀表达式合并到第二个正则表达式中,从而仅使用一个表达式可优化性能。</p> </li> </ul> <p><a target="_self" href="i:0hdefault.hosts:../searchurl/default.hosts">点击本链接自动用样例覆盖default.hosts</a></p> + /zh/adblock_domain/ + 域名文件可屏蔽文件中域名的一切子域名、孙域名、......,可彻底绝杀一切不良信息。所以用户屏蔽根域名时无需选择提示中出现的整个域名,只需选取最后两段或三段(最后两段不超过6字符如com.cn的域名可取四段)。 可使用列出外部脚本小书签生成外部js文件列表,然后长按底部工具栏&quot;js&quot;按钮,执行&quot;网址转链接&quot;菜单命令,长按可疑链接(一般为域名不同的外链),执行“屏蔽根域名”。 长按不良信息链接,点击“图片:屏蔽根域名”,修改弹出域名,一般取最后两段,点击&quot;确定&quot;屏蔽当前图片网址。 部分不良信息没有链接可长按,或虽有链接但长按时不出现图片相关菜单。此时可长按[JS]点击&quot;背景图片&quot;或&quot;看图模式&quot;,再长按不良信息链接点击“图片:屏蔽根域名”,屏蔽图片网址。 可长按设置开启&quot;资源嗅探&quot;,推荐设置文件&quot;types.sniff&quot;内容为js,刷新网页后关闭&quot;资源嗅探&quot;选项。在弹出的资源网页上长按链接,屏蔽根域名。 (可选) 长按不良信息链接,点击“屏蔽根域名”,屏蔽链接网址。 (可选) 某些不良信息靠javascript激发,链接中不出现域名,可点击激发至新网址后将新网址根域名屏蔽。 支持域名及整个网址正则表达式 文件格式每行如下: 根域名[空格]域名前缀正则表达式[空格]整个网址去掉协议部分后正则表达式 空格及后面两个正则表达式为可选择项。正则表达式采用java标准。 如果用到了第二个正则表达式,此时将域名前缀表达式合并到第二个正则表达式中,从而仅使用一个表达式可优化性能。 点击本链接自动用样例覆盖default.hosts 利用多账号登录获取资源 - https://jamesfengcao.gitlab.io/uweb/zh/multiaccount/ + /zh/multiaccount/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/multiaccount/ - <p>谈到资源就离不开bt, bt下载费时费力,离线bt是最佳选择。国内离线下载由于关键节点屏蔽,基本没啥用。我的个人体验是彻彻底底完全没用,但别人也许还有点用?国外唯一一个有好体验的是seedr, 不过seedr有个大问题需要解决。</p> <p>其它我曾推荐过的台湾bt, bug实在太多,现在看来也成了半个垃圾。万般无奈之下只能重拾seedr.</p> <p>seedr的问题是首次登录需要google人机验证,登录成功以后可以永久使用,无需小飞机辅助。</p> <p>以前偶尔飞飞一点问题也没有,毕竟1分钟飞行就可解决很长时间问题了。但目前的状态是信息基本被彻底封死,1分钟飞行也成了奢望。所以十分有必要珍惜这来之不易的1分钟飞行成果。</p> <p>现在直接上方案,使用超微浏览器多账号登录。飞行1分钟以后成功登录seedr, 此时退出浏览器,千万不能强退,一定要让运存中的登录信息写到内部存储。然后用户可备份应用内部目录下的.cjar文件,一旦浏览器失去登录状态,可恢复此文件,即可使用多账号登录重新登录,让这1分钟飞行成果保存下来,供万万年使用。需要注意的一点是:用户退出seedr账号会使保存的文件作废。故千万不要退出账号,需要用其它账号登录的请使用多账号登录。</p> + /zh/multiaccount/ + 谈到资源就离不开bt, bt下载费时费力,离线bt是最佳选择。国内离线下载由于关键节点屏蔽,基本没啥用。我的个人体验是彻彻底底完全没用,但别人也许还有点用?国外唯一一个有好体验的是seedr, 不过seedr有个大问题需要解决。 其它我曾推荐过的台湾bt, bug实在太多,现在看来也成了半个垃圾。万般无奈之下只能重拾seedr. seedr的问题是首次登录需要google人机验证,登录成功以后可以永久使用,无需小飞机辅助。 以前偶尔飞飞一点问题也没有,毕竟1分钟飞行就可解决很长时间问题了。但目前的状态是信息基本被彻底封死,1分钟飞行也成了奢望。所以十分有必要珍惜这来之不易的1分钟飞行成果。 现在直接上方案,使用超微浏览器多账号登录。飞行1分钟以后成功登录seedr, 此时退出浏览器,千万不能强退,一定要让运存中的登录信息写到内部存储。然后用户可备份应用内部目录下的.cjar文件,一旦浏览器失去登录状态,可恢复此文件,即可使用多账号登录重新登录,让这1分钟飞行成果保存下来,供万万年使用。需要注意的一点是:用户退出seedr账号会使保存的文件作废。故千万不要退出账号,需要用其它账号登录的请使用多账号登录。 利用浏览器地址栏对函数作图 - https://jamesfengcao.gitlab.io/uweb/zh/gnuplot/ + /zh/gnuplot/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/gnuplot/ - <p>使用Android端<a href="../index.html#">uweb浏览器</a>。<br> Termux提供了方便的软件包管理系统,缺省的uWeb地址栏功能配置需用到作图软件gnuplot。</p> <h4 id="安装gnuplot">安装gnuplot</h4> <ul> <li>安装 <a href="../searchurl/plugins.html">uweb定制Termux应用</a></li> <li>Termux下运行以下命令:<br> apt update<br> apt upgrade<br> apt install gnuplot</li> </ul> <h4 id="地址栏功能配置">地址栏功能配置:</h4> <ul> <li>配置文件<a href=e:default.acmd>default.acmd</a>每行格式如下:<br> 菜单名:mimeType:命令行</li> <li>命令行可包含参数%s,运行时自动用地址栏输入内容替换。</li> <li>如果浏览器窗口当前地址为本地url,则此目录同时作为命令行工作目录。</li> </ul> <h4 id="配置文件defaultacmd如下">配置文件default.acmd如下:</h4> <pre><code>命令:text/plain:%s 函数作图:image/svg+xml:gnuplot -e 'set term svg;set output; plot %s' 函数作图(3d):image/svg+xml:gnuplot -e 'set term svg;set output; splot %s' 超级计算器:text/html:echo &quot;%s&quot;|bc -l -q </code></pre> <p>长按uweb浏览器底部工具条刷新按钮弹出地址栏功能选择,选择“函数作图”,地址栏内输入函数如sin(x)**5就可显示函数图案。</p> <h4 id="常见问题及诊断">常见问题及诊断</h4> <ul> <li>确保gnuplot正确安装,在Termux提示符下,敲入gnuplot,然后回车,保证出现&quot;gnuplot&gt;&quot;。</li> <li>确保gnuplot正常运行, 在Termux提示符下,执行下面命令:<br> <code>gnuplot -e 'set term svg;set output; plot x'</code><br> 屏幕输出应该为正常的svg文件(类似html文本)。</li> <li>Termux应为uweb定制包,否则有一堆设定需要修改。</li> <li>超微浏览器下长按设置按钮,勾选“标准错误输出”。再次在地址栏执行画图操作,此时浏览器会显示出错信息。</li> <li>为保证地址栏输入函数符合gnuplot规范,首个测试函数建议为&quot;x&quot;,即整个地址栏内输入为&quot;x&quot;。</li> </ul> + /zh/gnuplot/ + 使用Android端uweb浏览器。 Termux提供了方便的软件包管理系统,缺省的uWeb地址栏功能配置需用到作图软件gnuplot。 安装gnuplot 安装 uweb定制Termux应用 Termux下运行以下命令: apt update apt upgrade apt install gnuplot 地址栏功能配置: 配置文件default.acmd每行格式如下: 菜单名:mimeType:命令行 命令行可包含参数%s,运行时自动用地址栏输入内容替换。 如果浏览器窗口当前地址为本地url,则此目录同时作为命令行工作目录。 配置文件default.acmd如下: 命令:text/plain:%s 函数作图:image/svg+xml:gnuplot -e 'set term svg;set output; plot %s' 函数作图(3d):image/svg+xml:gnuplot -e 'set term svg;set output; splot %s' 超级计算器:text/html:echo &quot;%s&quot;|bc -l -q 长按uweb浏览器底部工具条刷新按钮弹出地址栏功能选择,选择“函数作图”,地址栏内输入函数如sin(x)**5就可显示函数图案。 常见问题及诊断 确保gnuplot正确安装,在Termux提示符下,敲入gnuplot,然后回车,保证出现&quot;gnuplot&gt;&quot;。 确保gnuplot正常运行, 在Termux提示符下,执行下面命令: gnuplot -e 'set term svg;set output; plot x' 屏幕输出应该为正常的svg文件(类似html文本)。 Termux应为uweb定制包,否则有一堆设定需要修改。 超微浏览器下长按设置按钮,勾选“标准错误输出”。再次在地址栏执行画图操作,此时浏览器会显示出错信息。 为保证地址栏输入函数符合gnuplot规范,首个测试函数建议为&quot;x&quot;,即整个地址栏内输入为&quot;x&quot;。 浏览器控制服务器下载资源 - https://jamesfengcao.gitlab.io/uweb/zh/pcdown/ + /zh/pcdown/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/pcdown/ - <p>技巧等级:高级</p> <p>小孩要听英文有声书“The lying games”,国内服务器没一个能下的,最后还是在手机上用seedr秒下。但seedr的登录要用google人机交互确认,用过代理、tunnel至手机等方法,台式机死活登录不上。下面言归正传,讲一下超微浏览器直接下载资源至台式机的方法:</p> <p>手机需安装uweb定制<a href="../gnuplot">Termux</a>,并在termux下安装openssl,在Termux窗口下依次敲入如下命令:<br> <code>apt update<br> apt upgrade<br> apt install openssl</code></p> <p>脚本pcdownload内容如下(可放置在任意应用内部目录下,并相应修改default.longclick配置中文件路径):<br> <code>#!/data/data/com.termux/files/usr/bin/sh</code><br> <code>ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 firefox \&quot;$1\&quot;&quot;</code></p> <p>脚本需设置为可执行,Termux下执行命令:<br> chmod 755 /data/data/com.termux/files/usr/bin/pcdownload</p> <p>这里假定用户已经在台式机上设好ssh服务,台式机IP地址为192.168.2.102,准备用firefox下载。如果下载工具不是图形程序,则上述脚本中可删去“DISPLAY=:0”。</p> <p>配置文件default.longclick如下:<br> <code>PCdown:/data/data/com.termux/files/usr/bin/pcdownload</code></p> <p>重启超微浏览器,点击链接下载时会弹出菜单,选择&quot;PCdown&quot;,台式机会启动firefox下载手机指定文档。</p> <p>可能大家有疑问,台式机无法登录,为什么手机可以登录?这是因为手机上应用多哈。</p> + /zh/pcdown/ + 技巧等级:高级 小孩要听英文有声书“The lying games”,国内服务器没一个能下的,最后还是在手机上用seedr秒下。但seedr的登录要用google人机交互确认,用过代理、tunnel至手机等方法,台式机死活登录不上。下面言归正传,讲一下超微浏览器直接下载资源至台式机的方法: 手机需安装uweb定制Termux,并在termux下安装openssl,在Termux窗口下依次敲入如下命令: apt update apt upgrade apt install openssl 脚本pcdownload内容如下(可放置在任意应用内部目录下,并相应修改default.longclick配置中文件路径): #!/data/data/com.termux/files/usr/bin/sh ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 firefox \&quot;$1\&quot;&quot; 脚本需设置为可执行,Termux下执行命令: chmod 755 /data/data/com.termux/files/usr/bin/pcdownload 这里假定用户已经在台式机上设好ssh服务,台式机IP地址为192.168.2.102,准备用firefox下载。如果下载工具不是图形程序,则上述脚本中可删去“DISPLAY=:0”。 配置文件default.longclick如下: PCdown:/data/data/com.termux/files/usr/bin/pcdownload 重启超微浏览器,点击链接下载时会弹出菜单,选择&quot;PCdown&quot;,台式机会启动firefox下载手机指定文档。 可能大家有疑问,台式机无法登录,为什么手机可以登录?这是因为手机上应用多哈。 + + + 重定向网址 + /zh/redirect/ + Mon, 01 Jan 0001 00:00:00 +0000 + /zh/redirect/ + 全局重定向 长按设置,选中&quot;自定义资源重定向&quot;。此时如果全局重定向url为有效网址, 且最后一个字符为'/'、'?'或'=',则所有网络访问被内部重定向至url: &quot;[全局重定向url]+[原始url]&quot;。 如果没有以上述字符结尾,则意味着“光秃秃”。所有网络访问被内部重定向至url: &quot;[全局重定向url]+'/'+[scheme]+'/'+[原始域名和路径]&quot; Example: &quot;https://loud-moth-21.deno.dev/&quot; 使用仓库 &quot;https://github.com/torappinfo/fetch&quot; 入口&quot;deno.js&quot; 部署Deno 创建免费重定向,说明类似但代码不同 cloudflare workers 全局重定向代码 vercel 全局重定向 重定向文件 &quot;default.redirect&quot; (仅在无有效全局重定向url时生效) 点击添加google recaptcha国内镜像 使用服务器在国外的搜索引擎体验往往不如国内的引擎。由于网站屏蔽的原因,两者之间索引权重差别很大。国外受欢迎的技术类网站因此难以在百度上搜到;国外引擎能搜到但由于其中不少结果无法访问而体验糟糕。 其实,很多技术类网站在国内早有镜像,但由于镜像并非众所周知,其索引权重在百度上微不足道,非专门搜索不可得。 本文介绍一种技术,可重定向国外网址至国内镜像,极大的提高国外引擎的体验,让更多用户更客观的理解全球技术。 配置default.redirect: 文件每一行格式为: 域名:正则表达式:替换表达式 其中正则表达式以java语言规定为准,表达式中不能包含':'。正则表达式为空时系统默认为与域名相同。正则表达式,替换表达式同时为空时无重定向作用,但域名会允许CORS跨域访问 (目前仅对&quot;GET&quot; request生效)。 例子文件内容如下: developer.android.com::developer.android.google.cn 四种使用重定向的方法: 长按链接 添加文件&quot;国内镜像.js&quot;至&quot;longclick&quot;目录下。 文件内容如下: //e:%u 其中&quot;e:&quot;为uweb特殊url协议,意为&quot;edit&quot;,即&quot;编辑&quot;。当后面紧跟url网址的情况下会重定向网址。 重启uweb后长按链接弹出菜单选&quot;国内镜像&quot;,浏览器将访问网址的国内镜像。若网址为本地文件,则浏览器会自动调用此类文件编辑器。 长按工具条图像按钮。 长按设置,选中&quot;自定义重定向&quot;。 长按设置,选中&quot;自定义资源重定向&quot;。此选项除访问url重定向之外,还可重定向网页中一切资源。 更多重定向网址: www.bilibili.com::www.ibilibili.com pan.baidu.com::pan.baiduwp.com www.docin.com::www.docin365.com wenku.baidu.com::wenku.baiduvvv.com detail.tmall.com::detail.tmallvvv.com detail.m.tmall.com::detail.m.tmallvvv.com item.taobao.com::item.taobaovvv.com h5.m.taobao.com::h5.m.taobaovvv.com jd.com::jdvvv.com item.yhd.com::item.yhdvvv.com goods.kaola.com::goods.kaolavvv.com product.dangdang.com::product.dangdangvvv.com item.gome.com.cn::item.gomevvv.com.cn 装载网站离线资源 - https://jamesfengcao.gitlab.io/uweb/zh/offlinecache/ + /zh/offlinecache/ Mon, 01 Jan 0001 00:00:00 +0000 - https://jamesfengcao.gitlab.io/uweb/zh/offlinecache/ - <p><a href="..">uweb浏览器</a>支持装载网站离线资源。只需要将离线资源存为文件&quot;sitecache/[域名]/[全部路径,包括文件名,url中的路径部分]&quot;。<br> 打开选项&quot;使用离线资源&quot;以后超微将自动装载这些离线资源。</p> <p>离线资源可作为缓存提高浏览器性能; 可作为国外网站部分备份修复服务访问; 也可替换部分网站资源达到定制网站的作用。</p> + /zh/offlinecache/ + uweb浏览器支持装载网站离线资源。只需要将离线资源存为文件&quot;sitecache/[域名]/[全部路径,包括文件名,url中的路径部分]&quot;。 打开选项&quot;使用离线资源&quot;以后超微将自动装载这些离线资源。 离线资源可作为缓存提高浏览器性能; 可作为国外网站部分备份修复服务访问; 也可替换部分网站资源达到定制网站的作用。 diff --git a/zh/adblock/index.html b/zh/adblock/index.html index e78bcf9a..7e40f806 100644 --- a/zh/adblock/index.html +++ b/zh/adblock/index.html @@ -3,11 +3,10 @@ - 信息隐藏技术总览 - - - -
    - - - - - - - -
    -
    - -
    -

    常用语及输入法辅佐 -
    - -

    -
      - -
    -

    "default.input"

    -

    点击安装底部工具条共享按钮长按弹出菜单:
    -地址栏
    -换行
    -CTRL-Z: undo
    -CTRL-Y: redo

    -

    长按共享按钮弹出文件"default.input"定义菜单,文件每行为常用语。 常用语可以"@xxxx@"开头作为化名,方便用户区分无显示短语。

    -

    文件作为键盘输入

    -

    点击以下链接可安装至 常用链接 (长按底部五角星书签按钮):
    -utf8编码文件作为键盘输入

    -

    地址栏

    -
    地址栏空格开头开启自动补全输入法
    -

    常用语或AI提示词可放在文件"default.autoc"或其它“.autoc”文件中作为自动补全备选。地址栏如以空格开头,选中的补全备选会作为键盘输入到被聚焦的页面元素中。

    -

    点击安装AI提示词:
    -从上述指定的URL地址中提取数据

    -
    地址栏作为查询的一部分
    -

    如果主屏输入框以“空格+换行”开头,则搜索引擎所用查询关键词为"地址栏+输入框"。用户可在地址栏汇集参考资料,而在输入框进行AI问询。

    -
    地址栏作为输入法和文本处理中心
    -

    地址栏文本选择操作模式菜单项"⌨️"将文本输入到被聚焦的页面元素中。

    -

    部件檢索 (推荐长按链接下载至本地使用) 等网页可输出至地址栏。用户亦可安装常用命令或链接直接处理地址栏文本。

    - -
    -

    Last Modified: 30 October 2025
    -uweb1139: \n support in .input & .autoc files
    -

    
    -

    - - - -
    -
    - © 2018-2026 Richard H. Cao -
    -
    - - - - - diff --git a/zh/links/index.html b/zh/links/index.html index 1acd94fa..87ca3fe8 100644 --- a/zh/links/index.html +++ b/zh/links/index.html @@ -3,11 +3,10 @@ - 常用链接 - + + + +核心版本: +發布網址:部件檢索 (WFG製作) diff --git a/zh/searchurl/plugins.html b/zh/searchurl/plugins.html index 3cad3f96..aa0c34eb 100644 --- a/zh/searchurl/plugins.html +++ b/zh/searchurl/plugins.html @@ -3,6 +3,7 @@ + 插件汇总 @@ -11,10 +12,10 @@

    插件汇总

    插件影响到浏览器的安全,故需要完成以下步骤才能开启插件管理系统:

      -
    • 安装uweb定制Termux应用( +
    • 安装uweb定制Termux应用 ( 天翼 百度网盘 -),安卓10+以上termux必须先于超微浏览器安装(可卸载等待termux安装以后再重装),启动termux一次,以完成应用初始化。
    • +),需启动termux一次,以完成应用初始化。
    • 点击链接允许插件安装
    • 长按底部工具条设置按钮,勾选文件预处理。
    • 正常退出以保存设置,清理后台并重启浏览器。
    • diff --git a/zh/searchurl/quickstart.html b/zh/searchurl/quickstart.html new file mode 100644 index 00000000..8661a1ba --- /dev/null +++ b/zh/searchurl/quickstart.html @@ -0,0 +1,25 @@ + +主屏快捷访问 + + +

      +超微浏览器下点击"+"可自动添加至主屏快捷访问。

      + +

      凤凰 +

      +

      腾讯 +

      +

      搜狐 +

      +

      网易 +

      +

      1905电影 +

      +

      携程 +

      +

      京东 +

      +

      苏宁 +

      +

      淘宝 +

      +

      天猫 +

      +

      聚划算 +

      + + diff --git a/zh/searchurl/rjs.html b/zh/searchurl/rjs.html new file mode 100644 index 00000000..7af945c0 --- /dev/null +++ b/zh/searchurl/rjs.html @@ -0,0 +1,38 @@ + +运行javascript脚本 +

      运行javascript脚本

      +

      801+版本远程脚本格式由返回字符串改为返回url数组

      + +

      特定网址用户脚本

      +

      全局脚本位于js子目录, 长按[☰]按钮配置。点击以下链 +接安装:
      +记住密码
      +极速网页

      + +

      大型脚本可安装到"bookmarklet"目录下(长按js按钮):
      +google翻译
      +Eruda
      +彩云小译
      +Performance
      +移除覆盖物
      +

      + +

      远程脚本配置文件default.rjs样列如下,点击以下链接自动安装 (清空后台重启浏览器,长按搜索按钮,则弹出远程脚本菜单):
      + +彩云小译:['https://caiyunapp.com/dest/trs.js']

      +Selection to sentence:;let g='sentence';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);

      +Selection to line:;let g='line';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);

      +Selection to paragraph:;let g='paragraph';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);

      +显示数学公式:['https://fastly.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js']

      +md内容的html文件显示:['https://fastly.jsdelivr.net/npm/mdme']

      +md+tex内容的html文件:['https://fastly.jsdelivr.net/npm/texme']

      +新窗口打开链接:;let d=document;b=d.createElement('base');b.setAttribute('target','_blank');d.head.appendChild(b)

      +站内搜索:;open('i:15site:' + location.hostname)

      +编辑器拼写检查:;let t=document.getElementsByTagName('textarea');let v=t[0].spellcheck;if(v==null)v=false;t[0].spellcheck=!v

      +

      +

      远程及小型脚本可安装到default.rjs文件中。远程脚本对CSP网站仍然有效。:
      点击安装google翻译、背景图等

      +

      远程脚本配置文件default.rjs每行格式如下 (url部分支持js代码运算):
      [远程脚本名]:[返回url数组的javascript代码]

      +

      其中url可以为本地html5应用脚本地址。譬如'https://localapp[XXX]/....../[XXX].js'。此时,js脚本也可使用.link文件方式调用。

      + + + diff --git a/zh/searchurl/search.html b/zh/searchurl/search.html new file mode 100644 index 00000000..e9d1ba3e --- /dev/null +++ b/zh/searchurl/search.html @@ -0,0 +1,255 @@ + +浏览器多搜索引擎一键直达 +

      浏览器多搜索引擎一键直达

      +

      +超微浏览器下点击搜索引擎配置链接可自动添加到主屏。

      + +推荐引擎(将下面文本添加到home5.search中):
      + +

      顺序:i:40%s_00

      +

      google镜像:https://go-xyz.xyz/search?q=

      +

      apkdl:https://apkdl.in/app/search?q=

      +

      apkbog:https://www.apkbog.com/en/apks/search/

      +

      知乎:https://www.zhihu.com/search?type=content&q=

      +

      bilibili:https://m.bilibili.com/search?keyword=

      +

      抖音:https://www.douyin.com/search/%s?source=normal_search

      +

      高德地图:https://ditu.amap.com/search?query=

      +

      京东:https://search.jd.com/Search?enc=utf-8&keyword=

      +

      淘宝:https://taobao.com/search?q=

      +

      苏宁:https://m.suning.com/search/%s/

      +

      拼多多:http://mobile.yangkeduo.com/search_result.html?search_key=

      +

      优惠券:http://mall.yhm11.com/index.php?r=l&kw=

      +

      百度图片:http://image.baidu.com/search/index?tn=baiduimage&word=

      +

      bing图片:http://bing.com/images/search?q=

      +

      搜狗表情:https://pic.sogou.com/pic/emo/searchList.jsp?keyword=

      +

      微信:https://weixin.sogou.com/weixin?type=2&s_from=input&query=

      +

      大百科全书:http://h.bkzx.cn/search?sublibId=2&query=

      +

      wolfram:https://www.wolframalpha.com/input/?i=

      +

      维基:POST:kw=%s:https://www.wanweibaike.com/search

      +

      wiki:POST:kw=%s:https://en.wanweibaike.com/search

      +

      volupedia:https://en.volupedia.org/wiki/Special:Search?search=

      +

      wiki:https://en.wikipedia.org/wiki/Special:Search?search=

      +

      答案答案:https://daandaan.com/search?q=

      +

      问答库:https://m.asklib.com/s/

      +

      ACG:http://www.acgsou.com/?bound=content&local=1&keyword=

      +

      动漫花园:https://share.dmhy.org/topics/list?keyword=

      +

      末日动漫:https://share.acgnx.se/search.php?keyword=

      +

      慢慢买:http://s.manmanbuy.com/default.aspx?key=

      +

      快搜比价:https://ks.pconline.com.cn/product.shtml?q=

      +

      比一比价:http://www.b1bj.com/s.aspx?key=

      +

      盒子比价:http://www.boxz.com/search/

      +

      buzz:https://search.buzz.im/?search=

      +

      toplinks:https://www.toplinks.cc/s/?keyword=

      + +

      注:顺序搜索需文件engine.search,格式与home5.search相同,但其中url关键词部分必须用“%s”标识。用此引擎搜索的网页按前进键自动用下一引擎搜索。

      + +

      除了批量添加引擎外,超微可以将任意支持搜索的网址添加为搜索引擎。方法如下: +

        +
      • 访问网站并搜索。
      • +
      • 按菜单键,没有的话可长按底部工具条前进按钮弹出菜单。
      • +
      • 选择"添加为搜索引擎",对话框中将出现的地址适当编辑。不少网址后半部分为用"&"分割的等式,将包含搜索条目的等式移动到最后,删除搜索条目本身,其余等式可删可留。 +若无等式,一般在网址中直接删除搜索条目本身即可。
      • +

      + +

      常用引擎,供用户查漏添加:
      +

      google:https://google.com/search?q=

      +

      必应:http://cn.bing.com/search?q=

      +

      必应4:http://www4.bing.com/search?q=

      +

      百度:https://m.baidu.com/s?wd=

      +

      Fsou:https://fsoufsou.com/search?q=

      +

      paulgo:https://paulgo.io/search?q=

      +

      you:https://you.com/search?q=

      +

      neeva:https://neeva.com/search?q=

      +

      seekr:https://www.seekr.com/search?query=

      +

      神马:http://m.sm.cn/s?q=

      +

      夸克AI:https://quark.sm.cn/s?q=

      +

      无追:https://www.wuzhuiso.com/s?q=

      +

      360:http://www.so.com/s?q=

      +

      搜狗:https://m.sogou.com/web?query=

      +

      ecosia:https://www.ecosia.org/search?q=

      +

      萌搜:https://mengso.com/search?q=

      +

      头条:https://m.toutiao.com/search/?keyword=

      +

      magi:https://magi.com/search?q=

      +

      Lookao:https://lookao.com/search?q=

      +

      answers:https://www.answers.com/search?q=

      +

      影视:https://cupfox.app/search?key=

      +

      努努影院:https://www.nunuyy.top/so/%s---.html

      +

      4444影视:http://k.4444.li/search.php?searchword=

      +

      nfmovies:https://www.nfmovies.com/search.php?searchword=

      +

      电影狗:https://www.dianyinggou.com/so/

      +

      pianku:https://www.pianku.la/search/%s-------------.html

      +

      novip:https://www.novipnoad.com/s=

      +

      555dianying:https://555dianying.cc/vodsearch/-------------.html?wd=

      +

      zhenbuka:https://www.zhenbuka.net/search/-------------.html?wd=

      +

      7080:https://7080.wang/so.html?wd=

      +

      1090:https://1090hd.com/vod/search.html?wd=

      +

      微博:https://s.weibo.com/weibo/

      +

      疯狂音乐:http://music.myepoch.cn/?type=netease&name=

      +

      墨灵音乐:https://music.mli.im/music.web?auto-action=true&action=search&wd=

      +

      apkdl:https://apkdl.net/search?q=

      +

      apkpure:https://apkpure.com/search?t=app&q=

      +

      豌豆荚:http://m.wandoujia.com/search?key=

      +

      360手机助手:http://m.app.so.com/search/index?q=

      +

      应用宝:http://app.qq.com/#id=search&key=

      +

      xda:https://www.xda-developers.com/search/

      +

      boardreader:https://boardreader.com/s/%s.html

      +

      Feeling lucky:https://google.com/search?btnl=1&q=

      +

      pix:https://www.google.com/search?tbm=isch&q=

      +

      youtube:https://youtube.com/results?search_query=

      +

      news:https://news.search.yahoo.com/search/news?p=

      +

      stock:https://finance.yahoo.com/quote/

      +

      amazon:https://www.amazon.com/s/?field-keywords=

      +

      weather:https://www.wunderground.com/cgi-bin/findweather/getForecast?query=

      +

      IMDB:https://www.imdb.com/find?q=

      +

      film review:https://www.rottentomatoes.com/search/?search=

      +

      goodreads:https://www.goodreads.com/search?query=

      +

      audible:http://www.audible.com/search?sort=review-rank&advsearchKeywords=

      +

      audiobay:http://audiobookbay.nl/?s=

      +

      book_google:https://whogles.herokuapp.com/search?q=%22parent+directory%22+pdf+OR+epub+OR+DjVU+OR+xps+%22%s%22+-html+-htm+-shtml+-phtml+-php+-buy+-aspx+-jsp+-asp+-cgi+-pdf+-ftp+-unknownsecret&num=100&filter=0

      +

      book:https://booksc.org/s/?q=

      +

      book2:https://b-ok.cc/s/?q=

      +

      +语言学习:
      +

      merriam-webster:https://www.merriam-webster.com/dictionary/

      +

      dictionary:https://www.dictionary.com/browse/

      +

      britannica:https://www.britannica.com/search?query=

      +

      freedictionary:https://www.thefreedictionary.com/

      +

      wordreference:https://www.wordreference.com/definition/

      +

      vocabulary:https://www.vocabulary.com/dictionary/

      +

      OED:https://www.oed.com/LIBRARY?dest=https%3A%2F%2Fwww.oed.com%2Fsearch%3FsearchType%3Ddictionary%26q%3D%s%26_searchBtn%3DSearch&acc_id=65585&library_card=12363257

      +

      webster1913:https://www.websters1913.com/words/

      +

      powerthesaurus:https://www.powerthesaurus.org/%s/synonyms

      +

      macmillanthesaurus:https://www.macmillanthesaurus.com/search/?auto=complete&q=

      +

      etymology:https://www.etymonline.com/search?q=

      +

      dict.naver:https://dict.naver.com/enendict/english/#/search?query=

      +

      柯林斯双解:http://www.iciba.com/

      +

      柯林斯汉英大词典:https://www.hjdict.com/w/

      +

      剑桥双解:https://dictionary.cambridge.org/dictionary/english-chinese-simplified/

      +

      lword:https://lword.top/word.html#

      +

      ludwig:https://ludwig.guru/s/

      +

      webster:https://www.merriam-webster.com/dictionary/

      +

      趣词:https://www.quword.com/w/

      +

      quword etymology:https://www.quword.com/etym/s/

      +

      googledict:http://googledictionary.freecollocation.com/meaning?word=

      +

      牛津搭配:http://www.freecollocation.com/search?word=

      +

      eudic:http://dict.eudic.net/mdicts/en/

      +

      hollis.harvard:https://hollis.harvard.edu/primo-explore/search?tab=everything&search_scope=everything&vid=HVD2&mode=advanced&offset=0&query=any,contains,

      +

      现代日汉双解:https://dict.hjenglish.com/jp/jc/

      +

      訓詁:POST:word=%s:http://www.kaom.net/book_xungu8.php

      +

      ctext:https://ctext.org/dictionary.pl?char=

      +

      漢後:https://ctext.org/post-han?searchu=

      +

      先秦兩漢:https://ctext.org/pre-qin-and-han?searchu=

      +

      汉字:http://www.guoxuedashi.net/zidian/so.php?kz=1&sokeyzi=

      +

      字:https://zi.tools/zi/

      +

      说文解字:http://www.shuowen.net/so.php?s=

      +

      登樓古籍:POST:text=%s:https://denglou.pgdict.com

      +

      cnkgraph:https://cnkgraph.com/Book/Search?MetaDataKey=&ContentKey=

      +

      漢語大字典:POST:search_type=term&keyword=%s:https://homeinmists.ilotus.org/hd/hydzd2.php

      +

      漢語大字典页码:https://homeinmists.ilotus.org/hd/hydzd3.php?st=term&kw=

      +

      漢語大词典:POST:search_type=term&keyword=%s:https://homeinmists.ilotus.org/hd/hydcd2.php

      +

      漢語大词典全文:POST:search_type=description&keyword=%s:https://homeinmists.ilotus.org/hd/hydcd2.php

      +

      guoxuemi:http://www.guoxuemi.com/search/?keyword=

      +

      二十四史:http://www.guoxuemi.com/24shi/?keyword=

      +

      四库全书:http://www.guoxuemi.com/search/skqs.php?keyword=

      +

      古今图书集成:http://www.guoxuemi.com/gjtsjc/?keyword=

      +

      汉典:https://www.zdic.net/hans/

      +

      萌典:https://www.moedict.tw/

      +

      異體字:http://jf.xmu.edu.cn/variants/cc.html?q=

      +

      诗词:http://www.guoxuedashi.net/shici/so.php?kt=44&sokeysc=

      +

      汉典重光:https://wenyuan.aliyun.com/home/search-word?keyword=

      +

      +科技教材:
      +

      化学品:http://www.basechem.org/search?q=

      +

      britannica:https://www.britannica.com/search?query=

      +

      mathRef:https://reference.wolfram.com/search/?q=

      +

      mathSE:https://math.stackexchange.com/search?q=

      +

      phySE:https://physics.stackexchange.com/search?q=

      +

      physicsForum:https://www.physicsforums.com/search/2195918/?q=

      +

      chemSE:https://chemistry.stackexchange.com/search?q=

      +

      chem:https://www.ncbi.nlm.nih.gov/pccompound?term=

      +

      proofwiki:https://proofwiki.org/w/index.php?search=

      +

      physics:http://www.physics.org/explore-results-all.asp?q=

      +

      biology:https://www.biologyonline.com/dictionary/

      +

      nist chem:https://webbook.nist.gov/cgi/cbook.cgi?Formula=

      +

      chemiday:https://chemiday.com/search/?lang=en&q=

      +

      chem.libretexts:https://chem.libretexts.org/Special:Search?q=

      +

      bio.libretexts:https://bio.libretexts.org/Special:Search?q=

      +

      phys.libretexts:https://phys.libretexts.org/Special:Search?q=

      +

      med.libretexts:https://med.libretexts.org/Special:Search?q=

      +

      math.libretexts:https://math.libretexts.org/Special:Search?q=

      +

      stats.libretexts:https://stats.libretexts.org/Special:Search?q=

      +

      geo.libretexts:https://geo.libretexts.org/Special:Search?q=

      +

      eng.libretexts:https://eng.libretexts.org/Special:Search?q=

      +

      biz.libretexts:https://biz.libretexts.org/Special:Search?q=

      +

      human.libretexts:https://human.libretexts.org/Special:Search?q=

      +

      socialsci.libretexts:https://socialsci.libretexts.org/Special:Search?q=

      +

      workforce.libretexts:https://workforce.libretexts.org/Special:Search?q=

      +

      +直达官方文档的国外引擎:
      +

      oscobo:https://www.oscobo.com/search.php?q=

      +

      metager:https://metager.org/meta/meta.ger3?eingabe=

      +

      teoma:https://www.teoma.com/web?q=

      +

      lycos:https://search.lycos.com/web/?q=

      +

      technorati:http://technorati.com/search/index.php?q=

      +

      qwant:https://lite.qwant.com/?q=

      +

      swisscows:https://swisscows.com/web?query=

      +

      duck:https://duckduckgo.com/?q=

      +

      mojeek:https://www.mojeek.com/search?q=

      +

      gigablast:https://www.gigablast.com/search?c=main&qlangcountry=en-us&q=

      +

      yandex:https://yandex.com/search/?text=

      +

      yandex image:https://yandex.com/images/search?text=

      +

      searx:https://searx.be/?q=

      +

      tiekoetter:https://searx.tiekoetter.com/search?q=

      +

      lukol:https://www.lukol.com/s.php?q=

      +

      hotbot:https://www.hotbot.com/web?q=

      +

      +网盘搜索:
      +

      哎哟喂:http://www.aiyoweia.com/search/

      +

      飞飞盘:https://www.feifeipan.com/#/main/search?keyword=

      +

      56盘:https://www.56wangpan.com/search/kw

      +

      +学术搜索:
      +

      sweetsearch:https://sweetsearch.com/search?q=

      +

      refseek:https://www.refseek.com/search?q=

      +

      google scholar:https://scholar.google.com/scholar?q=

      +

      semanticscholar:https://www.semanticscholar.org/search?sort=relevance&q=

      +

      base:https://www.base-search.net/Search/Results?lookfor=

      +

      +开发者友好搜索:
      +

      git:https://github.com/search?type=Repositories&q=

      +

      man:http://man.cx/

      +

      code:http://searchcode.com/?q=

      +

      greasyfork:https://greasyfork.org/en/scripts?filter_locale=0&sort=updated&q=

      +

      symbolhound:http://symbolhound.com/?q=

      +

      vector:https://vector.me/search/

      +

      jsdelivr:http://www.jsdelivr.com/?query=

      +

      goobe:https://goobe.io/search.aspx?k=

      +

      +应用内搜索:
      +

      淘宝:taobao://s.m.taobao.com/h5?q=

      +

      百度地图:bdapp://map/place/search?query=

      +

      有道词典:yddict://dict/query?q=

      +

      知乎:zhihu://search?q=

      +

      应用商店:market://search?q=

      +

      微博:sinaweibo://searchall?q=

      +

      bilibili:bilibili://search?keyword=

      +

      dianping:dianping://shoplist/search?keyword=

      +

      bmap:bmap://?action=search&keyword=

      +

      meituan:imeituan://www.meituan.com/search?q=

      +

      拼多多:pinduoduo://com.xunmeng.pinduoduo/search_result.html?search_key=

      +

      小红书:xhsdiscover://search/result?keyword=

      +

      抖音:snssdk1128://search/result?keyword=

      +

      eudic:eudic://dict/

      +

      高德地图:androidamap://arroundpoi?sourceApplication=softname&dev=0&keywords=

      +

      +本地引擎(需安装定制termux及相应工具如bc,gnuplot等):
      +

      计算器:d:text/html:echo \'%s\'|bc -l -q:

      +

      函数作图:d:image/svg+xml:gnuplot -e \'set term svg;set output; plot %s\':

      +

      3d函数作图:d:image/svg+xml:gnuplot -e \'set term svg;set output; splot %s\':

      +

      +

      分类搜索

      +

      更多引擎可参看:
      Skittle
      searchengine +网盘搜索
      BT磁力
      词典
      有哪些特殊的搜索引擎
      google镜像 镜像2

      + + + diff --git a/zh/searchurl/searchcat.tar.gz b/zh/searchurl/searchcat.tar.gz new file mode 100644 index 00000000..6c47a735 Binary files /dev/null and b/zh/searchurl/searchcat.tar.gz differ diff --git a/zh/searchurl/template/backup.html b/zh/searchurl/template/backup.html index 7466dd04..8babb7ac 100644 --- a/zh/searchurl/template/backup.html +++ b/zh/searchurl/template/backup.html @@ -1,12 +1,10 @@ -备份与恢复 - -

      使用超微浏览器点击下面链接将备份(恢复)目录/文件
      +备份与恢复 +

      使用超微浏览器点击下面链接将备份(恢复)下列目录/文件至"%2%":
      + %1%

      -

      备份恢复

      +

      备份 恢复

      -

      重置用户及密码

      +

      设置用户及密码

      diff --git a/zh/searchurl/template/config.html b/zh/searchurl/template/config.html index 365a4844..551b9ea1 100644 --- a/zh/searchurl/template/config.html +++ b/zh/searchurl/template/config.html @@ -22,4 +22,4 @@ - + diff --git a/zh/searchurl/template/home.css b/zh/searchurl/template/home.css index e8c235ce..565b1822 100644 --- a/zh/searchurl/template/home.css +++ b/zh/searchurl/template/home.css @@ -1,9 +1,7 @@