我最近使用django.middleware.clickjacking.XFrameOptionsMiddleware
向Django应用添加了点击劫持保护,但是发现Firefox中不再加载PDF。当Chrome,Safari和Edge按预期嵌入PDF时,Firefox会引发以下控制台错误:
Load denied by X-Frame-Options: <site_base>/<file_path>.pdf does not permit framing.
我找到了我认为会有所帮助的@xframe_options_exempt
装饰器,但这只是封装了一个视图,而这些装饰器是直接通过Apache提供的。我发现的唯一解决方法是获得“忽略X-Frame-Options标头”浏览器插件,这并不是真正的客户友好型解决方案。
我尝试使用<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);
}
答案 0 :(得分:0)
我的同事能够解决这个问题-我们有一个自定义文件响应处理程序,该处理程序一定在做Firefox不喜欢的事情。通过添加@xframe_options_sameorigin
装饰器,它现在可以工作。