【问题标题】:Embed an External Page Without an Iframe?嵌入没有 iframe 的外部页面?
【发布时间】:2012-01-16 00:38:55
【问题描述】:

有没有办法在不使用 iframe 的情况下嵌入外部网页?我可以访问这两个站点,我只希望嵌入内容的页面根据嵌入的内容调整大小(它会随着时间的推移而变化,并且在多个站点上)。

谢谢!

编辑:我认为任何类型的 AJAX 都行不通,因为它是跨站点的,而且 JavaScript 不允许您加载站外内容(据我所知)。

【问题讨论】:

    标签: javascript asp.net html iframe embed


    【解决方案1】:

    HTML Imports 是 Web Components cast 的一部分,也是一种将 HTML 文档包含在其他 HTML 文档中的方法。见http://www.html5rocks.com/en/tutorials/webcomponents/imports/

    【讨论】:

      【解决方案2】:

      为什么不使用 PHP!都是服务器端:

      <?php print file_get_contents("http://foo.com")?>
      

      如果您拥有这两个网站,您可能需要在服务器端完整声明标头来确定此交易。效果很好。

      【讨论】:

      • Php 会很好地处理 jpb,从而为您的服务器产生额外的负载。客户端解决方案 (js) 将使您的服务器保持美观和新鲜
      【解决方案3】:

      这样的事情呢?

      <?php
      $URL = "http://example.com";
      $base = '<base href="'.$URL.'">';
      $host = preg_replace('/^[^\/]+\/\//', '', $URL);
      $tarray = explode('/', $host);
      $host = array_shift($tarray);
      $URI = '/' . implode('/', $tarray);
      $content = '';
      $fp = @fsockopen($host, 80, $errno, $errstr, 30);
      if(!$fp) { echo "Unable to open socked: $errstr ($errno)\n"; exit; } 
      fwrite($fp,"GET $URI HTTP/1.0\r\n");
      fwrite($fp,"Host: $host\r\n");
      if( isset($_SERVER["HTTP_USER_AGENT"]) ) { fwrite($fp,'User-Agent: '.$_SERVER
      
      ["HTTP_USER_AGENT"]."\r\n"); }
      fwrite($fp,"Connection: Close\r\n");
      fwrite($fp,"\r\n");
      while (!feof($fp)) { $content .= fgets($fp, 128); }
      fclose($fp);
      if( strpos($content,"\r\n") > 0 ) { $eolchar = "\r\n"; }
      else { $eolchar = "\n"; }
      $eolpos = strpos($content,"$eolchar$eolchar");
      $content = substr($content,($eolpos + strlen("$eolchar$eolchar")));
      if( preg_match('/<head\s*>/i',$content) ) { echo( preg_replace('/<head\s*>/i','<head>'.
      
      $base,$content,1) ); }
      else { echo( preg_replace('/<([a-z])([^>]+)>/i',"<\\1\\2>".$base,$content,1) ); }
      ?>
      

      【讨论】:

      • OP 要求提供 JS 解决方案。此外,在标签中没有关于使用 PHP 的 OP,只有 ASP.net
      • 即使这不是确切的解决方案,这也是一个非常有用的 php 脚本供其他人使用,+1
      • 不是 JS 要求的有效答案。我不使用 PHP。它将如何帮助我?你可以放一个伪代码。这会很有帮助
      【解决方案4】:

      您可以使用 jquery 加载外部页面:

      //这有帮助吗

      【讨论】:

      • +1 - 我认为您仍然需要允许从 www.orginaldomain.com 到 www.somesite.com 的跨域 ajax 调用。
      • 我认为您不能使用 javascript 包含,因为出于安全原因它受到限制。 DefyGravity,我该怎么做呢?
      • 此代码依赖于外部页面启用“allow-control-allow-origin: *”,您无法保证。
      • 这在 SharePoint 中不起作用,例如 Web 部件。 SharePoint 不允许我通过 js 加载其他文件吗? @FlavioEscobar
      【解决方案5】:

      或者你可以使用对象标签:

      http://jsfiddle.net/7MaXx/

      <!--[if IE]>
      <object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="http://www.google.be">
      <p>backup content</p>
      </object>
      <![endif]-->
      
      <!--[if !IE]> <-->
      <object type="text/html" data="http://www.flickr.com" style="width:100%; height:100%">
      <p>backup content</p>
      </object>
      <!--> <![endif]-->
      

      【讨论】:

      • 对象标签的高度有问题。即使给出高度:100%;还是不行。仅适用于固定高度值。否则需要获取外部网页的高度和宽度。那是我还找不到的东西。如果可以请帮忙
      • 您可以将高度设置为 2500px 之类的...我也有同样的问题。
      • 就我而言,我必须在 Object.xml 中显示动态创建的 HTML 内容。我正在使用 jQuery 替换对象标记运行时的数据属性,如下所示。 element.attr('data',"data:text/html;charset=utf-8,"+escape(HTMLContent)) 它就像魅力一样。
      • 哇!!在所有解决方案对我来说都失败的地方简直完美!非常感谢!
      • 将高度设置为使用视口高度单位 - 高度:99vh,修复高度问题
      【解决方案6】:

      问题很好,但答案是:这取决于。

      如果其他网页不包含任何表单或文本,例如,您可以使用 CURL 方法提取确切的内容,然后在您的页面上显示。你可以在不使用 iframe 的情况下做到这一点。

      但是,如果您要嵌入的页面包含例如表单,它将无法正常工作,因为表单处理在该站点上。

      【讨论】:

        猜你喜欢
        • 2010-09-08
        • 2015-02-23
        • 2017-05-30
        • 2015-10-20
        • 2020-10-30
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 2019-01-04
        相关资源
        最近更新 更多