Javascript jQuery将iframe写入XLS会导致iPhone上的沙盒访问冲突
我有一个按钮输入附加到jQuery操作,该操作将iframe写入DOM。iframe指向一个PHP脚本,该脚本组装了一个Excel文件以供强制下载 此按钮在桌面硬件上工作正常,但最新版本的iPhone Mac OS X导致此脚本向浏览器控制台抛出Javascript错误,并且似乎无法将iframe插入DOM。我在iOS v10.3.3和v11.0.1上复制了错误 iOS v10.3.3抛出以下Javascript错误: SecurityError DOM Exception 18:沙盒访问冲突:阻止处的帧访问处的帧。正在访问的帧是沙盒,并且缺少“允许相同原点”标志。在线3 iOS v11.0.1抛出以下内容: SecurityError DOM异常18:阻止了具有原点的帧 从使用原点访问帧 x-apple-ql-id://256b58b2-0821-4779-810b-5493faa49e07。框架 请求访问的协议为https,即正在访问的帧 有一个https协议。协议必须匹配。在里面 在线3 下面是我正在使用的JavascriptJavascript jQuery将iframe写入XLS会导致iPhone上的沙盒访问冲突,javascript,jquery,ios,iphone,Javascript,Jquery,Ios,Iphone,我有一个按钮输入附加到jQuery操作,该操作将iframe写入DOM。iframe指向一个PHP脚本,该脚本组装了一个Excel文件以供强制下载 此按钮在桌面硬件上工作正常,但最新版本的iPhone Mac OS X导致此脚本向浏览器控制台抛出Javascript错误,并且似乎无法将iframe插入DOM。我在iOS v10.3.3和v11.0.1上复制了错误 iOS v10.3.3抛出以下Javascript错误: SecurityError DOM Exception 18:沙盒访问冲突:
var LOCAL = {
execReport : function()
{
// Get form inputs
var t = $('select[name="t"] option:selected').val();
var s = $('select[name="s"] option:selected').val();
// Write the iframe into the DOM
var iframe = $('<iframe></iframe>', {
'src' : '/xls/observationsReport.php?gid=' + majGroup.gid + '&season=' + s + '&t=' + t,
'id' : 'reportIframe',
'width' : '1',
'height' : '1',
'frameborder' : '0',
'scrolling' : 'no',
'sandbox' : 'allow-same-origin'
}).appendTo('body').on('load', function() {
// Wait for the iframe to finish loading
var response = $.parseJSON($('#reportIframe').contents().find('body').html());
// Show any errors that happened
if (response && response.error)
{
// If the report assembly threw an error, display it here
// This is NOT related to the Javascript error I am experiencing!
}
});
}
};
您需要在observationsReport.php上设置的标题以允许相同的来源 此标题的目的是告知Bowser是否应允许使用框架加载页面内容。您的jQuery代码不足以克服此限制 或者正如MDN所说: X-Frame-Options HTTP响应头可用于指示是否允许浏览器以、或的方式呈现页面。网站可以通过确保其内容不嵌入其他网站,从而避免点击劫持攻击 鉴于您使用的是PHP,我猜您的Web服务器是使用Apache托管的,在上面的链接中有一个配置Apache部分: 要将Apache配置为发送所有页面的X-Frame-Options标头,请将其添加到站点配置中: 标题始终设置X-Frame-Options SAMEORIGIN 第二个错误看起来可能与访问页面的方式有关。我会尝试: 完全限定您的本地页面: “src”:”https://www.[REDACTED].com/xls/observationsReport.php?” 然后移除协议相关部分: “src”:“//www.[redact].com/xls/observationsReport.php?”