如何加载仅包含文本内容的iFrame?

时间:2012-05-15 23:24:59

标签: php javascript iframe

我在下面找到了用于创建iframe的代码段:

我只想在http://www.host.com加载文字内容,并使用display:none

使iframe不可见

背景:

我需要一种有效的方法来解析favicon位置。并非所有网站都有默认位置。例如<link rel="SHORTCUT ICON" href="../images/logo_small.ico" />

因此我需要的只是文字内容。 PHP有一个执行此操作的函数(file_get_contents),但我想在客户端执行此操作。

以下是mdn documentation on iframe

对于服务器端PHP使用file_get_contents.

function makeFrame() {
   ifrm = document.createElement("IFRAME");
   ifrm.setAttribute("src", "http://www.host.com");
   ifrm.style.width = 640+"px";
   ifrm.style.height = 480+"px";
   document.body.appendChild(ifrm);
} 

Delicious Bookmarklet的例子:

javascript:(function()
{
    f='http://www.delicious.com/save?url='+encodeURIComponent(window.location.href)+
    '&title='+encodeURIComponent(document.title)+'&notes='+
    encodeURIComponent(''+
    (window.getSelection?window.getSelection():document.getSelection?
    document.getSelection():document.selection.createRange().text))+'&v=6&';
    a=function()
    {
        if(!window.open(f+'noui=1&jump=doclose','deliciousuiv6','location=1,links=0,scrollbars=0,to
        olbar=0,width=710,height=660'))
        {
            location.href=f+'jump=yes'
        }
    };
    if(/Firefox/.test(navigator.userAgent))
    {
        setTimeout(a,0);
    }
    else
    {
        a();
    }
})()

2 个答案:

答案 0 :(得分:1)

当您和框架页面位于同一个域中时,您将只能访问iframe中的link元素。引用docs you found

  

尝试访问框架内容的脚本受same-origin policy的约束,如果是从其他域加载的,则无法访问其他窗口对象中的大多数属性。

因此,需要使用PHP解决方案。加载给定的域,使用tagsoup解析器并查询dom link[rel="SHORTCUT ICON"]

您可以使用该解决方案创建一个JSON API,该API可以通过应用程序的clientside js代码在Ajax上使用。

答案 1 :(得分:0)

由于浏览器中的cross-site scripting限制,我认为如果页面位于其他服务器上,您将很难获取信息客户端。

如果您想查看全部本地文:

XMLHttpRequest();

getResponseText();

我认为你可能最好使用PHP方法。

编辑:

我认为这是一个类似的问题:

XMLHttpRequest to get HTTP response from remote host

可能会有进一步的帮助。