一个hybird项目;index.html的head标签里包含一个scrip标签如下:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script>
脚本内容:
(function() {
window.BMap_loadScriptTime = (new Date).getTime();
document.write('<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2.0&ak=密钥&services=&t=20230104104957"></script>');
})();
有网络权限的情况下,它还会自动加载上面的其他脚本。
问题就在于iOS平台首次运行的时候会询问网络权限,用户确认的时间晚于整个App的加载了,index文件下的外部脚本都是获取失败的。我尝试在获取网络权限之后自己创建script标签去加载:
// 动态导入script
importScript(src: string) {
var script: HTMLScriptElement = document.createElement("script");
script.src = src;
script.type = 'text/javascript'
var topScript: HTMLScriptElement = document.getElementsByTagName("script")[0];
topScript.parentNode.insertBefore(script, topScript);
}
虽然能加载第一个脚本成功,但它不会执行脚本里包含的代码,也就无法加载它关联的其他脚本了。因为那是个动态内容,我也无法写死。
刷新一下页面就好了。
或者写一个钩子,用户确认授权你只通过
JSBridge
调用一下对应的函数去append
添加这句代码:<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script>