2

我们有一个带有嵌入式 IE 控件的 winforms 应用程序。

在这个 IE 控件中,我们运行一个 web 应用程序(我控制的是 web 应用程序,但不是 winforms 应用程序)。

在 Web 应用程序中,我运行一些 javascript 来打开一个子窗口并用 HTML 填充它:

    var features = "menubar=no,location=no,resizable,scrollbars,status=no,width=800,height=600,top=10,left=10";
    newTarget = "reportWin" + String ( Math.random () * 1000000000000 ).replace( /\./g ,"" );
    reportWindow = window.open('', newTarget, features); 
    var d = reportWindow.document; // <-- Exception is thrown here
    d.open();
    d.write('<head>\r\n<title>\r\n...\r\n</title>\r\n</head>');
    d.write('<body style="height: 90%;">\r\n<table style="height: 100%; width: 100%;" border="0">\r\n<tr>\r\n<td align="center" valign="middle" style="text-align:center;">\r\n');
    d.write(...);
    d.close();

当我们在这个 WinForms 应用程序中运行 Web 应用程序时(但不是单独运行,也不是在另一个 WinForms 应用程序中),我们在指示的行中收到 Javascript 错误:

Line 0: Access denied

关于为什么会发生这种情况或如何避免这种情况的任何想法?请注意,该窗口未打开 URL;它只是一个空窗。

在同一个应用程序中,在同一个域中打开具有指定 URL 的窗口确实有效。

4

1 回答 1

5

基于:

  1. IE 6/7 Access Denied 试图访问弹出窗口.document
  2. http://thecodecave.com/2006/07/20/how-to-get-around-access-is-denied-in-a-windowopen-javascript-call/

您遇到的问题是正在打开的 URL 需要与打开它的页面位于同一域中。大概一个空白的 Url 不会共享其创建者的域。我写了几个快速测试网页,发现

  1. 调用var reportWindow = window.open('', newTarget, features);导致访问被拒绝错误。
  2. 同样的事情var reportWindow = window.open('http://google.com', newTarget, features);
  3. 但是在站点中打开另一个页面进行渲染确实有效var reportWindow = window.open('WebForm2.aspx', newTarget, features);

最后一个弹出一个窗口,指向WebForm2.aspx执行此代码:

window.document.open();
window.document.write('<head>\r\n<title>\r\n...\r\n</title>\r\n</head>');
window.document.write('test<body style="height: 90%;">\r\n<table style="height: 100%; width: 100%;" border="0">\r\n<tr>\r\n<td align="center" valign="middle" style="text-align:center;">\r\n');
window.document.close();
于 2013-01-12T09:07:34.040 回答