我可以使用 JavaScript 在我的域中获取外部页面的标题吗?
Can I fetch a title of an external page in my domain using JavaScript?
我有几个页面(都位于与主页相同的目录中)通过 iFrame 加载到 parent。我想获取 child 页面标题中的每一个并将它们加载到一个数组中。那可能吗?
到目前为止我能做的最好的事情是在页面加载到 iFrame 时从 child 页面传递磁贴,但我需要从一开始就预加载所有标题以填充 table的内容如下图:
Parent代码:
var pages = new Array("page1.html", "page2.html", "page3.html");
var maxPages = pages.length;
function pageTitle(title){ //called from inside a child HTML
document.getElementById("titleText").innerHTML = title;
};
child代码:
window.onload = function passTitle(){
var title = $(document).find("title").text();
parent.pageTitle(title);
};
您想使用 window.frames
- 这是一个框架对象列表(不是数组 - 了解第二种解决方案很重要)
那么,最简单的方法就是这样
var pageTitles = [];
for (i = 0; i < window.frames.length; i++) {
if( !!window.frames[i].document) { // only frames in same domain
pageTitles.push(window.frames[i].document.title);
}
}
或者,更高级一点,但在我看来更好的方法
var pageTitles = [].filter.call(window.frames, function(frame) {
return !!frame.document; // return only frames in same domain
}).map(function(frame) {
return frame.document.title;
});
actually you could use just window
without the .frames
- at least in firefox, because window.frames === window
- however, I'd recommend using window.frames
for clarity in code
我有几个页面(都位于与主页相同的目录中)通过 iFrame 加载到 parent。我想获取 child 页面标题中的每一个并将它们加载到一个数组中。那可能吗?
到目前为止我能做的最好的事情是在页面加载到 iFrame 时从 child 页面传递磁贴,但我需要从一开始就预加载所有标题以填充 table的内容如下图:
Parent代码:
var pages = new Array("page1.html", "page2.html", "page3.html");
var maxPages = pages.length;
function pageTitle(title){ //called from inside a child HTML
document.getElementById("titleText").innerHTML = title;
};
child代码:
window.onload = function passTitle(){
var title = $(document).find("title").text();
parent.pageTitle(title);
};
您想使用 window.frames
- 这是一个框架对象列表(不是数组 - 了解第二种解决方案很重要)
那么,最简单的方法就是这样
var pageTitles = [];
for (i = 0; i < window.frames.length; i++) {
if( !!window.frames[i].document) { // only frames in same domain
pageTitles.push(window.frames[i].document.title);
}
}
或者,更高级一点,但在我看来更好的方法
var pageTitles = [].filter.call(window.frames, function(frame) {
return !!frame.document; // return only frames in same domain
}).map(function(frame) {
return frame.document.title;
});
actually you could use just
window
without the.frames
- at least in firefox, becausewindow.frames === window
- however, I'd recommend usingwindow.frames
for clarity in code