相关疑难解决方法(0)

jquery - IE浏览器在某些页面上拒绝iframe访问

我是printThis的作者,这是一个用于打印的jquery插件.

https://github.com/jasonday/printThis

我有一个用户提出了一个问题,我一直无法破解,不幸的是,我无法分享页面(隐私问题).

在用户的网站上,问题出现在IE的某些页面上,而不是其他页面上.打印失败,因为iframe仍然是空的.

IE中的错误在jQuery中:

contents: function (a) {
            return f.nodeName(a,
                "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
        }
Run Code Online (Sandbox Code Playgroud)

使用日志记录,我能够确定它在此行中失败:

var $doc = $("#" + strFrameName).contents();
Run Code Online (Sandbox Code Playgroud)

但同样,这只发生在某些页面上,我无法在该用户网站之外的任何实例中重新创建.

我的问题:这里有更好的方法吗?或一种使$doc物体更具防弹性的方法?


// -----------------------------------------------------------------------
// printThis v1.1
// Printing plug-in for jQuery
//
// Resources (based on) :
//              jPrintArea: http://plugins.jquery.com/project/jPrintArea
//              jqPrint: https://github.com/permanenttourist/jquery.jqprint
//              Ben Nadal: http://www.bennadel.com/blog/1591-Ask-Ben-Print-Part-Of-A-Web-Page-With-jQuery.htm
//
// Dual licensed under the MIT and GPL licenses:
//              http://www.opensource.org/licenses/mit-license.php
//              http://www.gnu.org/licenses/gpl.html
//
// (c) Jason Day 2012
//
// Usage:
// …
Run Code Online (Sandbox Code Playgroud)

printing iframe jquery printthis

12
推荐指数
3
解决办法
4万
查看次数

iframe contentWindow在缩短document.domain后抛出Access Denied错误

我通过以下方式动态创建IFRAME:

var wrapUpIframe = document.createElement("iframe");
wrapUpIframe.id = 'WrapUpDialog3';
wrapUpIframe.src = 'WrapUpDialog.html';    
document.body.appendChild(wrapUpIframe);
Run Code Online (Sandbox Code Playgroud)

在动态创作之后,我document.domain被缩短Servername.dc.com到只有dc.com,

但是当我尝试访问时,contentWindow我得到了一个Access被拒绝的错误:

document.getElementById("WrapUpDialog3").contentWindow.SomeFunction();
Run Code Online (Sandbox Code Playgroud)

注意:当我在HTML中静态定义IFRAME时,它可以正常工作.
我还试图document.domain通过以下方式更改我的IFRAME :

WrapUpDialog3.document.domain = dc.com;
Run Code Online (Sandbox Code Playgroud)

我检查了两个document.domain和我的IFRAME域,它们都是相同的.

我能做什么?

我正在使用IE9.

javascript iframe internet-explorer dynamic access-denied

10
推荐指数
1
解决办法
5万
查看次数

为什么这个JavaScript(使用document.open和document.write)不能在Internet Explorer或Opera中运行?

我迫切需要一些帮助.

我创建了一个非常平行的<script>,并重现了我在其他地方写过的另一个更复杂的<script>的问题.

这是它的作用:

  • 创建一个<iframe>并插入页面上的<div>
  • 创建一个文档并将其附加到<iframe>,其中包含一个<script>,它定义了一些函数(包括一个回调函数和一个使用AJAX加载外部<script>的函数)
  • 后一个外部脚本只是对回调函数的调用,该函数调用一个创建文档并将其附加到<iframe>的函数; 这应该有效地覆盖<script>

涉及的三个文件是:

这一切都适用于Firefox,Safari和Chrome.它崩溃的地方是Internet Explorer和Opera.会发生什么是main.js中的render()函数执行,并且触发了所有三个警报,但<iframe>中的文档没有被覆盖.我无法分辨出正在创建或写入的文档,或者根本不是.

如果我在render()函数的开头添加调试代码(如console.log(document)),那么工作浏览器似乎可以获得现有<iframe>文档的句柄并列出下面包含的属性.Internet Explorer似乎也可以找到某种文档.我只是不知道为什么不让我覆盖它.

这可能是范围问题吗?也许我不正确地使用document.write(),document.open()或document.close()方法,Firefox和其他一些浏览器只是让我逃脱它?

一个可能的线索:如果我把render()函数的内容拿出来(即,只是把它们放在main.js中的load()之后),这样可以正常工作.这告诉我,我不是如何使用document.open()等,但是在执行callback()函数时,文档对象不可用,或者超出了范围,或类似的东西.

这让我非常难过,这是一个非常重要的项目,即将到期.如果它让我摆脱这种干扰,我不会超越黑客或解决方法.任何帮助或见解都将非常感激!

console.log()的文档属性列表:

ATTRIBUTE_NODE: 2
CDATA_SECTION_NODE: 4
COMMENT_NODE: 8
DOCUMENT_FRAGMENT_NODE: 11
DOCUMENT_NODE: 9
DOCUMENT_POSITION_CONTAINED_BY: 16
DOCUMENT_POSITION_CONTAINS: 8
DOCUMENT_POSITION_DISCONNECTED: 1
DOCUMENT_POSITION_FOLLOWING: 4
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32
DOCUMENT_POSITION_PRECEDING: 2
DOCUMENT_TYPE_NODE: 10
ELEMENT_NODE: 1
ENTITY_NODE: 6
ENTITY_REFERENCE_NODE: 5
NOTATION_NODE: 12
PROCESSING_INSTRUCTION_NODE: 7
TEXT_NODE: 3
URL: "http://localhost/projects/test/ajax_loader/document_write/index.html"
activeElement: HTMLBodyElement
addEventListener: function addEventListener() {
adoptNode: function adoptNode() {
alinkColor: ""
all: HTMLCollection
anchors: HTMLCollection
appendChild: function appendChild() …

javascript iframe scope document document.write

7
推荐指数
1
解决办法
2万
查看次数

在同一域上的IE9中的contentDocument上"拒绝访问"

短/通用版本:

我正在开发一个应用程序(不幸的是,出于其他原因),将document.domain每个页面的顶部设置为"true"域的子字符串:对于子域名,例如sub.app.local,document.domain = "app.local".我也在动态创建一个iframe并将其添加到页面中.iframe加载与父页面位于同一服务器上的文件.稍后,一些Javascript需要访问contentDocumentiframe 的属性.

这在现代浏览器中很好,但由于此错误导致IE9中出现问题.(请参阅最佳答案以获得对此原因的详细解释.)AFAIK,每个比IE9更新的浏览器都会自动继承document.domain以编程方式创建的iframe,因此这是IE9特有的.由于我的场景的一些独特要求(tldr:iframe src需要更改),上面帖子中的答案对我不起作用.

更长/特定于应用程序的版本:

我在IIS上运行的应用程序中使用FineUploader,将文件上传到S3.在现代浏览器中,一切都运行良好,但IE9支持给我带来麻烦,即使在遵循文档(支持IE9及更早版本)配置iframeSupport.localBlankPagePath选项之后也是如此.我有点难过!

  • 我在FineUploader 4.0.3和5.0.3上都尝试过这个.
  • 在IE11中一切正常.如果我在F12控制台中将文档模式切换为9,则会中断.
  • 我没有打开CORS支持,因为我没有从其他域加载任何东西.
  • 我在与我的页面相同的域中有一个虚拟/空白文件.
  • 我可以看到(在"网络"面板中)来自AWS的包含Location密钥的HTTP 303响应,以及指向我的空白文档的值.如果我将整个网址粘贴到地址栏中,页面会正常加载,并且按预期显示为空白.
  • 我已尝试添加X-Frame-Options SAMEORIGIN到服务器的响应标头,如此处所示,但它没有帮助.

我在控制台中遇到的错误是:

[Fine Uploader 5.0.3] Error when attempting to access iframe during handling of upload response (Access is denied.
)
[Fine Uploader 5.0.3] Amazon likely rejected the upload request
Run Code Online (Sandbox Code Playgroud)



UPDATE

我已经确定它不是开箱即用的原因是因为应用程序设置document.domain了页面加载,并且它与(子集)不同location.host.FineUploader的303重定向机制到空白页面工作正常,但document.domainiframe的不同之处(由于IE9没有继承属性),因此拒绝访问.

实际的S3上传工作正常 …

javascript internet-explorer internet-explorer-9 fine-uploader

6
推荐指数
1
解决办法
2489
查看次数