使用flutter的inappWbeview嵌入js的高德地图自定义样式IOS端没展示, android端没事。有没有IOS小伙伴解释一下,使用系统浏览器打开可以展示,飞书内置浏览器也可以展示,微信内置浏览器也可以展示,使用IOS原生写的WKwebview展示的也是没有样式的
https://lbs.amap.com/demo/amap-ui/demos/amapui-amaploader/amapui-amaploader1 这个地址直接用iOS原生加载与IOS浏览器加载不一致
该回答引用ChatGPT
如果在使用 Flutter 的 InAppWebView 嵌入高德地图自定义样式的过程中,在 iOS 端没有正确展示,可能有以下几个原因:
1、InAppWebView 版本过低:在 InAppWebView 的早期版本中,可能存在一些与 iOS 平台相关的问题。可以尝试升级到最新版本,查看是否有改进。
2、JS 代码的问题:可能是因为嵌入的 JS 代码有误,导致自定义样式无法正确加载。可以尝试检查 JS 代码是否正确、是否存在语法错误等问题。
3、iOS 平台限制:iOS 平台对于 InAppWebView 中的一些特性可能存在一些限制。可能需要针对 iOS 平台进行特殊的配置,以确保嵌入的地图能够正确展示。
针对以上可能的原因,可以尝试采取以下措施进行解决:
1、升级 InAppWebView 版本:可以尝试升级 InAppWebView 到最新版本,查看是否有改进。
2、检查 JS 代码:可以仔细检查嵌入的 JS 代码是否正确,并且确保在 iOS 平台中也可以正确运行。
3、针对 iOS 平台进行特殊配置:可以查看 InAppWebView 的官方文档,了解 iOS 平台的限制,并进行相应的配置。可以尝试在 Info.plist 中添加必要的配置项,或者使用 InAppWebView 的特殊 API 进行配置。
如果以上措施仍然无法解决问题,可以尝试查看相关日志或者调试信息,查找更加详细的错误信息,以便更好地定位和解决问题。
参考GPT和自己的思路,这可能是由于iOS系统的CSP(Content Security Policy)导致的问题。CSP是一种用于限制页面中可执行脚本的安全策略。如果你的高德地图自定义样式中包含不符合CSP的内容,可能会导致iOS端无法加载。
为了解决这个问题,可以尝试以下步骤:
1 在您的HTML文档中添加以下meta标签以允许加载不符合CSP规则的内容:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; img-src 'self' data: *">
2 尝试在Webview中打开一个简单的HTML页面,以验证您的iOS设备是否允许加载不符合CSP规则的内容。如果您发现自定义样式加载正常,则可能需要进一步检查您的高德地图自定义样式文件。
3 检查您的高德地图自定义样式文件是否包含不符合CSP规则的内容。如果是这样,请尝试删除这些内容并重新加载页面。
希望这些步骤能够帮助您解决问题。
“Devil组”引证GPT后的撰写:
或在应用程序的 Info.plist 文件中添加以下代码,以允许 In-App WebView 在 iOS 中加载自定义样式:
<key>NSAllowsArbitraryLoads</key>
<true/>
你好,可能是因为 iOS 端 WebView 默认开启了 Safari 浏览器的“智能跟踪预防”功能,导致网页中使用的部分资源无法加载。解决方法是在 WebView 加载时加入如下代码:
if (Platform.isIOS) {
await controller.evaluateJavascript(
'document.documentElement.style.webkitUserSelect="none";'
'document.documentElement.style.webkitTouchCallout="none";'
'document.documentElement.style.webkitTapHighlightColor="rgba(0,0,0,0)";'
'window.addEventListener("message", (event) => {'
'if (event.data && event.data.type === "setWebViewTheme") {'
'var args = event.data.args;'
'document.documentElement.style.setProperty("--page-bg", args.page_bg);'
'document.documentElement.style.setProperty("--header-bg", args.header_bg);'
'document.documentElement.style.setProperty("--header-color", args.header_color);'
'document.documentElement.style.setProperty("--title-font-size", args.title_font_size);'
'}'
'}, false);',
);
}
以上代码会先禁用一些 Safari 的默认功能,然后监听 message 事件,在收到“setWebViewTheme”消息时将自定义的样式应用到页面上。你需要根据自己的代码将以上代码片段整合到合适的位置,其中 controller 是 InAppWebView 的控制器,应该在初始化 WebView 时创建并传递给 InAppWebView。
注意,以上代码是基于 JavaScript 的,如果你的高德地图自定义样式是使用其他技术实现的,可能需要针对具体的技术进行修改。