嵌入没有 iframe 的外部页面?

IT技术 javascript asp.net html iframe embed
2021-03-07 11:55:44

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

谢谢!

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

6个回答

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

<script>$("#testLoad").load("http://www.somesite.com/somepage.html");</script>
<div id="testLoad"></div>
//这有帮助吗
这在 SharePoint 中不像 Web 部件那样工作。SharePoint 不允许我通过 js 加载其他文件吗?@FlavioEscobar
2021-04-28 11:55:44
此代码取决于外部页面启用“allow-control-allow-origin:*”,您无法保证。
2021-04-29 11:55:44
我认为您不能使用 javascript 包含,因为出于安全原因它受到限制。DefyGravity,我该怎么做?
2021-05-03 11:55:44
+1 - 我认为您仍然需要允许从 www.orginaldomain.com 到 www.somesite.com 的跨域 ajax 调用。
2021-05-07 11:55:44

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

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]-->
就我而言,我必须在 Object.js 中显示动态创建的 HTML 内容。我正在使用 jQuery 替换对象标记运行时的数据属性,如下所示。element.attr('data',"data:text/html;charset=utf-8,"+escape(HTMLContent)) 并且它的工作原理就像魅力一样。
2021-05-08 11:55:44
你可以将高度设置为 2500px 之类的东西......我有同样的问题。
2021-05-09 11:55:44
哇!!在所有解决方案对我来说都失败的地方非常完美!大谢谢!
2021-05-12 11:55:44
对象标签有高度问题。即使给出高度:100%;仍然不起作用。仅适用于固定高度值。否则需要获取外部网页的高度和宽度。我还没有找到的东西。如果可以请帮忙
2021-05-13 11:55:44
将高度设置为使用视口高度单位 - 高度:99vh,修复了高度问题
2021-05-14 11:55:44

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

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

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

像这样的事情怎么办?

<?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) ); }
?>
即使这不是确切的解决方案,这也是一个非常有用的 php 脚本供其他人使用,+1
2021-04-23 11:55:44
OP 要求提供 JS 解决方案。此外,在标签中没有关于使用 PHP 的 OP,只有 ASP.net
2021-05-02 11:55:44
不是 JS 要求的有效答案。我不使用PHP。它将如何帮助我?你可以放一个伪代码。那会很有帮助
2021-05-14 11:55:44

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

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

如果您拥有这两个站点,则可能需要在服务器端使用完整的标头声明来确认此事务。工作精美。

Php 可以很好地处理 jpb,从而为您的服务器带来额外的负载。客户端解决方案 (js) 将使您的服务器保持良好和新鲜
2021-04-19 11:55:44