使用jquery创建的iframe会在当前域之前添加绝对URL

时间:2012-03-04 03:58:01

标签: javascript jquery internet-explorer xss

我正在使用jQuery创建一个iframe到“跨站点”URL。这在Firefox中正常工作,但IE正在将父页面域添加到iframes src URL。

一个例子是如果我正在创建iframe(使用jQuery):

<iframe src="http://www.google.com"></iframe>

IE尝试加载的页面是:

http://www._mysite_.com/http://www.google.com

如果我在HTML中静态创建iframe一切正常。只有当我使用JS创建它才会加载错误的页面。

我想我会理解这是否是IE内置的故意跨站点保护,但我想知道是否是这种情况,或者我是否遗漏了某些内容。

这是IE的默认行为吗?如果有人有解决方法,将不胜感激。

编辑:

生成的代码是:

<iframe id="myIframe" width="500" height="400" frameborder="0" src="http://www._website_.com/aaa/bbb/ccc">

我在静态HTML上测试了生成的代码,它在IE中运行正常。

编辑2:

这就是我创建iframe的方式:

jQuery('.signUp').live('click', function() {

    var url = 'http://www._website_.com'+$(this).attr('href');

    var thisModal='<div id="dialogRes" class="windowG"><iframe id="iframeG" frameborder="0" width="500" height="400" src="#"></iframe></div>';

    jQuery('body').append(thisModal);

    jQuery('#iframeG').prop('src', url);        

    return false;

});

在这一行:

jQuery('#iframeG').prop('src', url);        

我已尝试attr()并将其全部删除,只需将url放入iframe的src标记即可。似乎没什么用。

1 个答案:

答案 0 :(得分:1)

问题是在IE中,href属性始终作为绝对URL返回。所以,如果你有

<a id="demo" href="bar/baz">...</a>

然后你的网站http://mydomain.com/foo

jQuery('#demo').attr('href') == 'http://mydomain.com/foo/bar/baz';

解决此问题的两个选项是从href属性解析(可能的)完整域,或者使用不同的自定义属性来保存目标地址/路径(例如{{1} })。