

混合应用:从 file 协议到本地 HTTP 服务器
source link: http://www.phodal.com/blog/history-api-in-webview-file-protocol-goto-http-protocol/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

过去的几个月里,我们一直在开发一个混合应用。前端框架使用的是 Angular,但是在某些 Android 机型上运行的时候,报了以下的错误:
main.aca1d67….bundle.js:1235 EXCEPTION: Uncaught (in promise): SecurityError: Failed to execute 'replaceState' on 'History': A history state object with URL 'file:///#/' cannot be created in a document with origin 'file://' and URL 'file:///android_asset/www/index.html'.t.handleError @
错误的主要原因是: History API 在某些 Chrome 内核的 WebView 上不支持 file:// 协议 。据不完成测试统计,版本在 45~49 之间,都有这个问题。
随后找到了官方文档中的 issue: Cannot run angular 2+ from file:/// - looks like 'base href="/"' is the issue
官方 issue 中的一个高赞答案,一共两步,并是不 work。
1.将 Router 配置为 Hash
CommonModule,RouterModule.forRoot(routes,{useHash:true})
2.修改 base href:
<script>document.write('<base href="' + document.location + '" />');</script>
于是乎,这时我们有两个选择:
- 重写 HashLocationStrategy,如下 issue 12341 所说: The router HashLocationStrategy should not use the History API
- 使用 HTTP 服务器来运行本地的 WebView 资源文件。
方式一,面对的主要挑战是,不只 Angular 使用 History API 来处理 hash 路由,其它框架也使用了相似的东西,如 React Router、Vue Router。
方式二,面对的主要问题是,我们需要在 Android 设备上启动一个 HTTP 服务器,并能让它支持跨域请求和访问本地文件。
在这个过程中,想到了 Ionic 框架也是使用 Angular 来编写的。于是,先运行了个官方的 Hello, world,发现它是运行在 http://localhost:8100
上的。
紧接着,复制了官方的 WebView 插件代码: Ionic Web View for Cordova 。随之,我们就遇到了跨域的问题,原因是这些请求都是通过 WebView 发出去。
而这个问题,又近乎无解,我们无法获取 WebView post 请求中的参数。于是乎,我们只能通过插件来向 WebView 提供一个跨域请求的能力: Cordova Advanced HTTP 。
Recommend
-
9
您现在的位置:首页 --> PHP --> 使用file_get_contents提交http post 使用file_get_contents提交ht...
-
12
8 April 2020 / Botnet DDG的新征程——自研P2P协议构建混合P2P网络 DDG Mining Botnet 是一个活跃已...
-
17
打通本地部署和公有云,混合云架构让“鱼”和“熊掌”兼得(一)当前各行各业在积极拥抱云计算,但由于一些历史原因和合规要求导致很多企业全面上云比较困难,比如企业监管制度及合规要求一些核心数据库必须保留在本地数据中心;本地数据中心作为企业固定...
-
10
这是洒家半年前研究的,没啥重要的原创内容,一直懒得写,前几天想起来,于是搞篇文章瞎扯一番。本文主要以 V2RayX、V2RayU 等图形化客户端为例,研究本地 HTTP 服务的未授权访问漏洞,及其利用方法。 漏洞及其背景
-
6
原文地址:https://blog.noob.ninja/spilling-local-files-via-xxe-when/ 在这篇文章中,我们将分享一个非常有趣的XXE漏洞利用技术,据我所知,这个技术最先见于https:...
-
35
用来请求访问已被 URI 识别的资源。如浏览器请求某个地址的资源。用来传输实体参数的方法。用法上与 GET 很相似,但不是为了获取相应结果。用来传输文件。但在 Web 应用中配合 RESTful 架构实现资源更新。用于确认 URI 及资源的响应头部。...
-
2
使用 http-server 开启一个本地服务器 1. http-server 简介一个简单的零配置命令行 http 服务器 足够简单易用,可用于本地测试和开发 在写前端页面中,经常会在浏览器运行 HTML 页面,从本地文件夹中直接打开的...
-
25
http://http://http://@http://http://?http://#http:// | daniel.haxx.se
-
6
挂载群晖为本地磁盘最好的软件和协议是? - V2EX V2EX › NAS 挂载...
-
4
megalayer|5月促销|香港阿里混合云|美国家宽|新加坡|高防服务器 | VPS小白 VPS小白 >
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK