Firefox中OneSignal HTTPS iframe触发SecurityError的问题求助
解决Firefox 60中OneSignal延迟初始化的SecurityError问题
我之前也遇到过类似的Firefox跨域安全限制问题,结合你的场景和OneSignal的历史issue,这里有几个可行的解决思路:
1. 提前预加载OneSignal SDK
你之前把SDK的加载代码从JSP中移除,导致点击初始化时SDK可能还未完全加载完成,Firefox 60的安全机制对这种延迟触发的跨域iframe加载会更严格。建议把SDK的加载放回JSP的<head>中保持异步加载,外部JS依然通过点击触发初始化逻辑:
在JSP的<head>里添加:
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async='async'></script>
外部JS代码保持不变即可,这样SDK会在页面加载阶段就开始下载,等用户点击按钮时SDK已经准备就绪,初始化时创建iframe的操作就不会触发SecurityError了。
2. 确保SDK完全加载后再执行初始化
如果无法修改JSP的<head>部分,可以在初始化函数里增加等待逻辑,确保OneSignal对象完全可用后再执行init操作:
(function() { document.querySelector('.js-initOneSignal').addEventListener('click', initOneSignal); function initOneSignal() { function waitForSDKReady() { if (window.OneSignal && typeof window.OneSignal.push === 'function') { window.OneSignal.push(["init", { appId: "my-app-id", autoRegister: false, notifyButton: { enable: true } }]); } else { // 每隔100ms检查一次,直到SDK加载完成 setTimeout(waitForSDKReady, 100); } } waitForSDKReady(); }; })();
这种方式可以避免在SDK未初始化完成时就调用push方法,减少Firefox安全策略触发的概率。
3. 临时调整Firefox混合内容设置(仅调试用)
如果只是测试环境验证问题,可以临时修改Firefox的设置来确认原因:
- 在Firefox地址栏输入
about:config - 找到
security.mixed_content.block_active_content,将其设置为false - 重启Firefox后测试
注意:这个方法仅适合本地调试,绝对不建议让生产环境的用户修改浏览器设置,优先采用前两种代码层面的解决方案。
另外,你提交的OneSignal issue#359暂时没回复的话,可以先尝试上面的方法,应该能解决Firefox 60的这个特定问题。
内容的提问来源于stack exchange,提问作者VictorGalisson
相关产品推荐
相关产品推荐

