1

我有以下 JavaScript 代码:

myFrame.src = pathToCourseContents + "/otherComponents/myData.htm";

此行执行后:

myFrame.src equals "http://myServer.com/otherComponents/myData.htm"

如果我将这个 URL 地址放入 FireFox,我会得到一个包含信息的网页。

我想要得到的是字符串形式的 myData.htm 的内容。

我认为这会起作用:

var myString = myFrame.contentWindow.document.body.outerHTML

但 myFrame.contentWindow 似乎是空白的。

我究竟做错了什么?

是否有 JavaScript 代码可以以字符串的形式获取 html 内容?

4

3 回答 3

1

你可以尝试使用这个:

document.getElementsByTagName("html")[0]
于 2013-04-23T17:36:43.463 回答
0

contentWindow当您从不同的域加载 url 时,通常是空白的。出于安全考虑,禁止访问此类内容。如果这是您的情况,那么您注定要失败(嗯,有一些解决方法,例如通过为容器页面提供服务的服务器进行代理,以便浏览器认为它们来自同一个域;或者在两个文件中设置 document.domain,如果您控制它们两者;等等)。

于 2013-04-23T17:43:58.863 回答
0

如果您没有遇到相同的源策略,则可能是您尝试在节点存在之前访问它们(即在 DOM 准备好之前)。

<iframe>一个简单的解决方案是在load事件上添加一个事件侦听器。

myFrame.addEventListener('load', function () { // add a listener
    console.log( // do what you want
        '<iframe> loaded\n',
        myFrame.contentWindow,   // the <iframe>'s Window
        myFrame.contentDocument, // the <iframe>'s document
        '\n',
        myFrame.contentDocument.body.outerHTML
    );
});
// set src after so that listener exists before event raised
myFrame.src = 'http://fiddle.jshell.net/'; // same origin pass

示例小提琴

.contentWindow每次刷新时都会清除 get ,因此您无法向其添加页面加载侦听器,这将为您提供所需的结果,但您可以在其中侦听其他事件<iframe>

于 2013-04-23T18:04:52.170 回答