我最近使用django.middleware.clickjacking.XFrameOptionsMiddleware
为Django应用程序添加了clickjacking保护,但发现PDF不再加载到Firefox中。虽然Chrome,Safari和Edge按预期嵌入了PDF,但Firefox会引发以下控制台错误:
Load denied by X-Frame-Options: <site_base>/<file_path>.pdf does not permit framing.
我找到了@xframe_options_exempt
装饰器,我认为这会有所帮助,但这只是包装视图,而这些直接通过Apache提供。我发现的唯一修复是获得“Ignore X-Frame-Options Header”浏览器插件,这不是一个客户友好的解决方案。
我尝试使用<embed>
,<object>
和<iframe>
嵌入PDF并导致相同的浏览器控制台错误,如果我删除clickjacking中间件,PDF再次加载就好了。
以前有人遇到这样的事吗?相关代码:
<select id="pdf_graph_selection" onchange="updatePDF()">
{% for pdf_graph in pdf_graphs %}
<option value="{{pdf_graph.url"}}>{{pdf_graph.name}}</option>
{% endfor %}
</select>
<div id="pdf_container"></div>
function updatePDF() {
let new_source = $("#pdf_graph_selection").val();
let new_graph = "'<embed src='" + new_source + "' width='70%' height='900px' class='pdf_embed'></embed>;
$("#pdf_container").html(new_graph);
}
我的同事能够帮助解决这个问题 - 我们有一个自定义文件响应处理程序,它必须做一些Firefox不喜欢的事情。通过添加@xframe_options_sameorigin
装饰器,它现在正在工作。