Javascript jQuery将iframe写入XLS会导致iPhone上的沙盒访问冲突

Javascript 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:沙盒访问冲突:

我有一个按钮输入附加到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

下面是我正在使用的Javascript

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?”