【问题标题】:How to access the DOM of a user selected web address如何访问用户选择的网址的 DOM
【发布时间】:2012-05-24 09:50:50
【问题描述】:

我需要直接从我的页面执行小书签的功能。

我需要在给定 url 的情况下提取网页的 document.title 属性。

假设用户输入 www.google.com,我希望能够以某种方式在 iframe 中提取 google.com,而不是访问 document.title 属性。

我知道书签(从书签栏运行的 javacript)可以访问用户所在的任何站点的 document.title 属性,然后将该信息 ajax 到服务器。

这基本上是我想要做的,但不使用书签直接从我的网页。

【问题讨论】:

标签: javascript


【解决方案1】:

不幸的是,这并不容易。出于安全原因,不允许 JavaScript 访问不在同一域中的框架或窗口的文档对象。这种事情必须通过对后端 PHP 脚本的请求来完成,该脚本可以获取所请求的页面,通过 DOM,并检索 <title> 标记中的文本。如果你没有这种能力,你所要求的将会更加困难。

这是基本的 PHP 脚本,它将获取页面并使用 PHP 的 DOM 扩展来解析页面的标题:

<?php
$html = file_get_contents($_GET["url"]);

$dom = new DOMDocument;
$dom->loadXML($html);
$titles = $dom->getElementsByTagName('title');

foreach ($titles as $title) {
    echo $title->nodeValue;
}
?>

演示: http://www.dstrout.net/pub/title.htm

【讨论】:

  • 我希望会有一个“hack around”...bookmarklet 可以在任何页面上运行...这使得它们在某种程度上变得强大...但是这种能力可以在任何页面上运行网站...用户必须将其拖放到书签中...如果只有黑客可以模拟这个。
【解决方案2】:

根据This question 你可以使用 PHP 来实现,试试这个代码:

    <?php

function getTitle($Url){
    $str = file_get_contents($Url);
    if(strlen($str)>0){
        preg_match("/\<title\>(.*)\<\/title\>/",$str,$title);
        return $title[1];
    }
}
//Example:
echo getTitle("http://www.washingtontimes.com/");

?>

但是,我假设可以使用 JS 读取文件内容并执行相同的搜索标签逻辑。

尝试搜索here

【讨论】:

  • 谢谢,我希望找到一个 .js 解决方案……但我可能不得不访问服务器。
【解决方案3】:

您可以编写一个服务器端脚本来为您检索页面(即使用 curl)并解析 dom 并将所需的属性作为 json 返回。然后用ajax调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2023-04-02
    • 1970-01-01
    • 2017-05-11
    • 2010-09-16
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多