TypeError:'undefined'不是对象(评估'window.frames [“content”]。document.location')

时间:2012-10-04 00:00:44

标签: javascript html iframe

在Internet Explorer上,我的代码工作得很好,但是我在Mac上使用Safari,它给了我这个错误。这是我的代码:

<!DOCTYPE html>
<html>
<head>
<title>The Me Project</title>
<link href="me.css" rel="stylesheet" type="text/css" href="me.css" />
<script type="text/javascript">
function page(setter)
{
    if (setter=="home") 
    {
        window.frames["content"].document.location.href = "home.html";
    }
    else if (setter=="birth")
    {
        window.frames["content"].document.location.href = "birth.html";
    }
    else if (setter=="cool")
    {
        window.frames["content"].document.location.href = "cool.html";
    }
    else if (setter=="family")
    {
        window.frames["content"].document.location.href = "family.html";
    }
    else
    {
        window.frames["content"].document.location.href = "home.html";
    }
}
</script>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
</head>
<body>
<div id="header">
    <div id="nav">
    <h1>Parth's Me Project</h1>
    <ul>
    <li><a onclick="page('home')">Home</a></li>
    <li><a onclick="page('birth')">Birth Year</a></li>
    <li><a onclick="page('cool')">Cool Things</a></li>
    <li><a onclick="page('family')">My Family</a></li>
    </ul>
    </div>
</div>
<div id="main">
<iframe src="home.html" name="content" id="content" seamless height="1000" frameborder="0"/>
</div>
<frame>
</body>
</html>

如果您需要其他页面,请告诉我。我正在尝试保留相同的标题和导航栏,因此我在底部使用iframe。

1 个答案:

答案 0 :(得分:2)

该错误告诉您window.frames["content"].document已解析为undefined,因此浏览器无法访问location属性。

在iFrame中访问文档在不同的浏览器中有所不同,请参阅下文。此外,链接这样的引用并不是一个好主意(正如您所发现的那样),因为它会使调试更加困难。

function setIframeHref(iFrameID, href) {
    var frame, cont, doc;

    // Firstly, get the iframe
    frame = window.frames[iFrameID];

    // In some versions of IE, frame.document is the document the iFrame 
    // is in, not the document in the iFrame. Also, some browsers
    // use contentWindow and others contentDocument.
    // In some browsers, contentDocument points to the iFrame window,
    // in others to the document, so...
    if (frame) {
        cont = frame.contentWindow || frame.contentDocument;

        // cont might be the iFrame window or the document
        if (cont) {
            doc = cont.document || cont;

        // For current browsers that don't have the above
        } else {
            doc = frame.document
        }   
    }

    // If have a document, set the vaue of location.href
    if (doc && doc.location) { 
        doc.location.href = href;
    }
}

请注意,如果HREF不是来自同一个域或子域,您可能仍会遇到问题。有些网站不允许他们的网页显示在iFrame中,因此有些浏览器会拒绝显示这些网页,而有些网站则会在新标签或窗口中打开它们。