【问题标题】:How can I load an iFrame with only textual content?如何加载仅包含文本内容的 iFrame?
【发布时间】:2012-05-17 02:17:09
【问题描述】:

我在下面找到了用于创建 iframe 的 sn-p:

我只想在 http://www.host.com 加载文本内容并使用 display:none 使 iframe 不可见

背景:

我需要一种有效的方法来解析网站图标的位置。并非所有站点都有默认位置。例如<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);
} 

美味书签示例:

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();
    }
})()

【问题讨论】:

标签: php javascript iframe


【解决方案1】:

只有当您的页面和框架页面都在同一个域中时,您才能访问 iframe 中的链接元素。引用docs you found

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

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

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

【讨论】:

  • iframe 中的页面无法访问我的 DOM,反之亦然。
  • 无论如何这就是小书签的工作原理……如果小书签可以做到的话……我也可以……我想
  • 嗯,小书签不需要做任何事情。您发布的 Delicous 示例不访问任何其他窗口/框架。小书签代码将在当前窗口的范围内运行,提取一些数据(这里:选择)并打开一个弹出窗口,数据编码为 URL 参数。
  • 嗯,书签中的源可以来自不同的域(比如delicious.com)并在另一个域(你所在的域)上工作......
  • 当您点击小书签时,浏览器会针对当前页面执行 JavaScript。它与执行它的页面具有相同的来源。
【解决方案2】:

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

如果你想看的都是本地的:

XMLHttpRequest();

getResponseText();

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

编辑:

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

XMLHttpRequest to get HTTP response from remote host

回复可能会提供进一步的帮助。

【讨论】:

  • 你在谈论 Ajax...我不确定这是否相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多