【问题标题】:Possible to use PHP to simulate an iFrame so I can access the DOM of a non hosted page?可以使用 PHP 来模拟 iFrame,以便我可以访问非托管页面的 DOM?
【发布时间】:2013-07-13 10:09:21
【问题描述】:

我正在开展一个项目,我想将一个网页(我没有托管)的内容加载到我正在托管的网页中,并且能够访问非托管页面的 DOM。

如果有人对是否有可能实现这一点有任何建议,我很想听听一些反馈。也许 PHP 甚至不是答案。也许我对这一切都错了。在这一点上,我绝对愿意接受任何建议!

感谢阅读, DJ

【问题讨论】:

  • 将远程页面 html 加载为 curl,然后直接将其内联转储到您的页面中,这样您就可以访问其 dom
  • @Dave - 他这样做了,这是唯一的方法,但还有另一个问题 - 包含页面上的链接使人们远离提到的“应用程序”。这是一个不容易解决的问题。
  • 轻松修复,因为 afxdesign 已经声明,当您在应用程序中输出之前重写 dom 时,只需在嵌入式链接上使用正则表达式

标签: php dom include same-origin-policy


【解决方案1】:

您可以在 PHP 中使用 curl 将网页加载到变量而不是 IFrame 中,然后使用包装在布局中的 PHP 输出变量的内容。这样,所有内容的 DOM 都应该可以通过 JavaScript 访问。

【讨论】:

  • 感谢 ronnied。我可以将 url 卷曲到页面中,但是当我尝试卷曲 IP 地址时,我什么也得不到。这是我正在使用的代码:// Check for cURL if( !function_exists( 'curl_init' ) ) die( 'cURL is not installed.' ); // Create a cURL resource handler (cURL Handler = ch) $c = curl_init(); // Set options $c = curl_init('http://192.168.1.xx/u/r/l'); curl_exec($c); $output = curl_exec( $c ); curl_close( $c ); echo $output;
【解决方案2】:

正如ronnied 所回答的,您可以使用CURL 来加载页面。您可以在加载的页面上使用简单的正则表达式查询来更新所有链接。以下代码应该为您指明正确的方向,尤其是查找 preg_replace 和 preg_replace_callback:

//Regular expression to deal with links...
function replaceCallback($match){ 
    $url = $match[3];
    ...
    return $match[1].$match[2].$replacement.$match[4];
}

//$html is curl'd page contents
$pattern = "/(<a.*?href\s*=\s*)('|\")(.*?)('|\")/i";
$html = preg_replace_callback($pattern,'replaceCallback',$html);    

正则表达式很难理解。但是当您这样做时,您将获得丰厚的回报,因为它们非常强大...

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2010-12-02
    • 1970-01-01
    • 2013-05-15
    • 2012-10-13
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多