iframe 报错Mixed Content: The page at ‘xxx‘. This request has been blocked; the content must be served

当HTTPS页面嵌套HTTP内容时,由于安全策略限制导致资源加载失败。解决方法是在主页面模板中设置自动将HTTP请求转换为HTTPS,从而确保所有资源都能正常加载。然而,这种方法可能存在一定的兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题原因

当前页面通过iframe嵌套其他页面时,因为主页面为https协议,加载页面协议也是https,但是iframe嵌套的页面内部的资源请求使用了http导致资源无法正常加载;

解决办法

在主页面的html模板中加入

自动将http请求升级https请求后可结局该问题;

缺点

兼容性问题

在Flutter中使用WebView时,如果遇到错误"This request has been blocked; the content must be served over HTTPS",这是因为现代浏览器和WebView都默认启用了安全策略,要求所有的请求必须通过HTTPS协议进行,而不是不安全的HTTP协议。 要解决这个问题,可以尝试以下几种方法: 1. **使用HTTPS**:确保你请求的资源是通过HTTPS协议提供的。将所有的资源链接从HTTP改为HTTPS。 2. **允许不安全的请求**:如果你无法使用HTTPS,可以在WebView的配置中设置允许不安全的请求。不过,这种方法不推荐在生产环境中使用,因为它会降低应用的安全性。 ```dart WebView( initialUrl: 'http://example.com', javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController webViewController) { // 允许不安全的请求 webViewController.loadUrl('javascript:(function() {document.cookie = "cross-site-cookie=whatever; SameSite=None; Secure";})();'); }, ) ``` 3. **使用混合内容**:如果你使用的是混合内容(即在HTTPS页面中加载HTTP资源),可以通过配置WebView来允许混合内容。 ```dart import 'dart:io'; WebView( initialUrl: 'https://example.com', javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController webViewController) { if (Platform.isAndroid) { webViewController.loadUrl('javascript:(function() {document.cookie = "cross-site-cookie=whatever; SameSite=None; Secure";})();'); } }, gestureNavigationEnabled: true, ) ``` 4. **检查请求的URL**:确保你请求的URL是正确的,没有拼写错误或其他问题。 通过以上方法,你应该能够解决WebView中出现的"This request has been blocked; the content must be served over HTTPS"错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值