日期:2014-05-17  浏览次数:20633 次

chrome 的 try catch 的问题

两个页面,一个父页,一个子页,父页里有一个iframe指向子页。

如果父页和子页在同一个域名里,那么可以访问 top.aa ,如果不在同一个域里面,子页虽然可以访问 top ,但是不能给 top.aa 设置值。

我想做一个“缓存”,把一些常用信息缓存在 top里。因为父页被更新的次数要远小于子页的更新次数。

但是问题是,并不一定在一个域名里,不在一个域名里就不做缓存了。

我想做一下判断,typeof top.__cache 在跨域的时候会报错,于是想用try,但是IE里面好用,chrome里面不好用。

折腾半天只好采用折中的办法来判断,虽然可以判断出来,但是还是会报错。

请问一下有没有更好的办法(注意,在chrome浏览器里面要好用)。我的代码如下:



try {
        if (typeof top == "undefined")
            canUseCache = false;
        else {
            top.t_m_p = "tmp";
            if (top.t_m_p != "tmp") /*chrome里,抓不住这个异常,只好这么判断了*/
                canUseCache = false;
            else {
                if (typeof top.__cache == "undefined")
                    top.__cache = {};
                
                canUseCache = true;
            }
            
        }    
    } catch (e) {
        /* 出异常,不允许访问,不缓存了。*/
        canUseCache = false;
    }
iframe 跨域

------解决方案--------------------
原来你说的是document.domain属性,这个属性是只读的,赋值就会报安全错误,不然就天下大乱了
那就直接通过比较它不就完了
top的类型是window,不是document