从iframe调用window.open()时出现错误8150002e,寻求技术解决方案
问题:iframe内调用window.open()触发错误8150002e
在iframe中执行window.open()时,收到错误提示:
由于错误8150002e,无法完成操作
执行的代码如下:
win = window.open(serviceEndPointsBasicUrl + '/api/SmartVisitReportGenerator/GetSmartVisitOnDemand/' + '?userID=' + self.uUserID() + '&LongDate=' + longDate + '&TimezoneOffset=' + getTimezoneOffset() + '&ContentType=' + self.ChosenContentType() + '&IncludeFoodDiary=' + self.IncludeFoodDiary(), '_blank');
解决方法
绑定用户主动触发逻辑
浏览器会拦截非用户主动触发的弹窗,比如异步请求完成后调用window.open()。必须把弹窗代码放在用户点击、按键等直接交互的回调函数里,比如按钮的click事件回调中。改用父窗口执行弹窗
尝试调用父窗口的open方法绕过iframe限制(需满足同源策略):win = window.parent.open(`${serviceEndPointsBasicUrl}/api/SmartVisitReportGenerator/GetSmartVisitOnDemand/?userID=${self.uUserID()}&LongDate=${longDate}&TimezoneOffset=${getTimezoneOffset()}&ContentType=${self.ChosenContentType()}&IncludeFoodDiary=${self.IncludeFoodDiary()}`, '_blank');编码URL参数
若参数包含特殊字符(如空格、中文)会导致URL格式错误,给每个参数做URL编码:const targetUrl = `${serviceEndPointsBasicUrl}/api/SmartVisitReportGenerator/GetSmartVisitOnDemand/` + `?userID=${encodeURIComponent(self.uUserID())}` + `&LongDate=${encodeURIComponent(longDate)}` + `&TimezoneOffset=${encodeURIComponent(getTimezoneOffset())}` + `&ContentType=${encodeURIComponent(self.ChosenContentType())}` + `&IncludeFoodDiary=${encodeURIComponent(self.IncludeFoodDiary())}`; win = window.open(targetUrl, '_blank');检查iframe的sandbox权限
若iframe设置了sandbox属性,需添加allow-popups权限,否则会禁止弹窗:<iframe src="你的页面地址" sandbox="allow-popups allow-scripts"></iframe>
内容的提问来源于stack exchange,提问作者user22083206
相关产品推荐
相关产品推荐

