3

我正在尝试从我的网站执行 HTTP GET 到通过 iframe 引入的另一个网站。

在 Firefox 上,您可以在源代码中看到正确的 url 及其正确的参数在 iframe src 中——并且它有效。

在 IE 上,您可以在源代码中看到正确的 url 及其正确的参数在 iframe src 中——但它不起作用......

IE 是否有某些东西不允许您通过查询字符串中的 iframe 传递参数?

我尝试在 IE 中刷新 iframe,我尝试在 IE 中刷新我的页面和 iframe,并且我尝试复制 url 并将其重新粘贴到 iframe src 中(强制它刷新,就像我刚输入一样它进入该 iframe 窗口的地址栏中)。还是没有运气!

任何人都知道为什么会发生这种情况,或者有任何建议来尝试解决这个问题?

编辑:我无法提供指向此的链接,因为该站点需要我们的站点和供应商站点的密码和登录凭据。即使我可以在我们的网站上创建一个测试帐户,它对测试过程也没有任何好处,因为我不能为供应商网站做同样的事情。至于代码,它所做的只是在页面加载时从后端代码创建src并从后端设置 src 属性......

//Backend code to set src
mainIframe.Attributes["src"] = srcWeJustCreated;

//Front end iframe code
<iframe id="mainIframe" runat="server" />

编辑: 问题从未解决。回答自动接受,因为赏金已过期。当我们的网站即将上线时,我会用更多信息和页面链接重新提出这个问题。


谢谢,
马特

4

6 回答 6

9

默认情况下,IE 查询参数中的安全设置在 Iframe 中被阻止。在 Internet 选项下的安全选项卡上,将您的安全级别设置为低。如果这解决了您的问题,那么您知道这是您的问题。如果该站点是面向外部客户的,那么期望他们拒绝安全设置可能是不合理的,因此您可能必须找到解决方法。

于 2009-07-28T22:33:17.620 回答
1

假设您的网站是www.acme.com并且 iframe 源位于www.myvendor.com

IIRC,大多数域级安全设置不关心主机名,因此将 DNS CNAME 添加到 myvendor.acme.com 的区域文件中指向www.myvendor.com。然后,在您的 IFRAME 中,使用您的主机名别名设置源。

另一种解决方案可能是让您的 Javascript 将 src 设置为您自己服务器上的重定向器脚本(因此,在您的域内)。然后,您的脚本将简单地将 IFRAME 重定向到具有相同参数的“正确”URL。

于 2009-07-31T15:58:26.297 回答
0

根据 Mike 的回答,在您的情况下,最简单的解决方案是使用“参数隐藏”将所有 GET 参数转换为单个 URL。

最具可扩展性的方式是 URL 中的每个“文件夹”都由参数、逗号和值组成。例如,您将在您的应用程序中使用这些 URL:

http://example.com/app/param,value/otherparam,othervalue http://example.com/app/param,value/thirdparam,value3

这将相当于这些:

http://example.com/app?param=value&otherparam=othervalue http://example.com/app?param=value&thirdparam=value3

这在带有 .htaccess 的 Apache 上非常容易,但看起来您使用的是 IIS,所以我将由您来研究确切的实现。

编辑:刚刚回到这一点,并意识到如果您不拥有它,您将无法在不同的域上实现上述内容:p 但是,您可以像这样在服务器端执行此操作:

  • 在您自己的服务器上将上述参数隐藏设置为特殊脚本(如果 IE 不介意从同一服务器获取 GET,则可能没有必要)。
  • 在 Javascript 中,从各种参数构建看起来像静态的 URL。
  • 让服务器上的脚本使用参数并读取外部 URL 并将其输出,即获取内容服务器端。这个问题可能会帮助你。

因此,您的 iframe URL 将是:

http://yoursite.com/app/param,value/otherparam,othervalue

该页面将读取并显示 URL:

http://externalsite.com/app?param=value&otherparam=othervalue

于 2009-07-31T15:12:30.547 回答
0

如果它适合您,您可以使用片段标识符在站点之间进行通信。你可以在这里找到一篇文章:http: //tagneto.blogspot.com/2006/06/cross-domain-frame-communication-with.html

于 2009-08-03T12:15:20.510 回答
0

毕克化学所说的。我认为正在发生的事情是您正在获取一个太大而 IE 无法处理的 URL。我注意到您正在尝试发送名为 src 的变量,该变量可能很长,超过 4k。我之前遇到过这个问题,这是我的代码。注意关于 IE 的评论。另请注意,它会导致 Firefox 出现问题,该问题在另一条评论中得到解决。

var autoSaveFrame = window.frames['autosave'];
// try to create a temp form object to submit via post, as sending the browser to a very very long URL causes problems for the server and in IE with GET requests.
var host = document.location.host;
var protocol = document.location.protocol;
// Create a form
var f = autoSaveFrame.document.createElement("form");
// Add it to the document body
autoSaveFrame.document.body.appendChild(f);
// Add action and method attributes
f.action = protocol + '//' + host + "/autosave.php"; // firefox requires a COMPLETE url for some reason! Less a cryptic error results!
f.method = "POST"
var postInput = autoSaveFrame.document.createElement('input');
postInput.type = 'text'
postInput.name = 'post';    
postInput.value = post;
f.appendChild(postInput);
//alert(f.elements['post'].value.length);
// Call the form's submit method
f.submit();
于 2009-08-03T13:12:17.080 回答
-1

尝试使用间接方法。创建一个表格。将其操作参数设置为您要导航的基本 url。将其方法设置为 POST。将其目标设置为您的 iframe,然后创建必要的参数作为隐藏输入。最后,提交表格。它应该可以工作,因为它可以与 POST 一起使用。

于 2009-07-29T19:26:05.610 回答