关于 javascript:使用 jquery 创建的 iframe 在当前域中添加绝对 URL

iframe created with jquery prepends absolute URL with current domain

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

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

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

IE 会尝试加载的页面是:

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

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

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

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

编辑:

生成的代码是:

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

我在静态 HTML 中测试了生成的代码,它在 IE 中确实可以正常工作。

编辑 2:

这就是我创建 iframe 的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
jQuery('.signUp').live('click', function() {

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

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

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

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

    return false;

});

在这一行:

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

我已经尝试过 attr() 以及将其全部删除并将 url 放在 iframe 的 src 标记中。似乎没有任何效果。


问题在于,在 IE 中,href 属性总是以绝对 URL 的形式返回。所以如果你有

1
...

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

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

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