跨子域的iFrame Javascript

时间:2012-01-13 13:58:49

标签: javascript iframe subdomain

我知道这是一个重复的问题,但我的要求略有不同,

在上一个问题中,通过设置来解决这个问题:

document.domain = "yourdomain.com";

在两个页面上。

但是......我有一个www.example.com域名,我有一个mail.example.com

mail.example.com是我无法访问的子域名,它由我的共享主机及其访问我的电子邮件的地方自动生成。但是我想在我的一个页面上使用mail.example.com作为源的iframe。

e.g。

// www.example.com/mail.php
<html>
    <head>...</head>
    <body>
       ...
       <? include("header.php"); ?>
       ...
       <iframe src="mail.example.com"></iframe>
       ...
    </body>
</html>

这可以按预期工作,但某些样式应用于iframe,所以我想使用javascript删除所有样式,然后添加我自己的样式。

但是因为我无法访问mail.example.com,所以我无法在子域中设置document.domain = "example.com";

还有另一种方法吗?

编辑

我没有说清楚我已经尝试过的东西。

这是我在www.example.com域名的mail.php页面中的确切iframe代码:

<iframe id="mail" src="http://mail.a3mediauk.co.uk/mail2/source/index.php" height="800" width="960"></iframe>

这是在mail.php页面的head元素最顶部的javascript代码:

document.domain = "http://mail.a3mediauk.co.uk";

这是我试图用来删除样式的jquery代码:

$(function(){
    $("iframe#mail").load(function(){
        $("iframe#mail body").removeAttr("bgcolor");
    });
});

如果有任何帮助,document.domain会在chrome控制台中抛出此错误:

Uncaught Error: SECURITY_ERR: DOM Exception 18

2 个答案:

答案 0 :(得分:0)

你可能忘记了http:// iFrame是客户端(HTML),因此您必须输入绝对路径,因为它是一个不同的域。您所写的内容将重定向到http://yourdomain.com/mail.yourdomain.com

答案 1 :(得分:0)

就相同的原始政策而言,URL必须完全匹配。如果一个是另一个的子域并不重要;字符串不同,所以你违反了政策。

我没有看到一个好的解决方案。如果页面很简单(没有或只有简单的JavaScript,没有链接等),您可以尝试将带有JavaScript的邮件页面提取到String中,去掉标题(即将body转换为div })然后将其添加到您的主页面。但是,当然,这会破坏所有链接,引用者,并导致许多其他问题,例如,如果安装了新版本的邮件接口会发生什么?

另一种解决方案是安装代理服务,使mail.domain.com的所有内容都可用your.domain.com/mail。如果您在域上运行Apache,则使用the "Proxy Throughput" feature的简单重写规则应该可以解决问题。