代码之家  ›  专栏  ›  技术社区  ›  hlovdal

如何使用javascript从另一个页面(同一域)的内容获取信息?

  •  1
  • hlovdal  · 技术社区  · 16 年前

    假设我有一个网页( /index.html )包含以下内容

    <li>
        <div>item1</div>
        <a href="/details/item1.html">details</a>
    </li>
    

    我想要一些javascript /html 加载该 /details/item1.html 翻页并从该页中提取一些信息。 页面 /详情/item1.html 可能包含以下内容

    <div id="some_id">
        <a href="/images/item1_picture.png">picture</a>
        <a href="/images/item1_map.png">map</a>
    </div>
    

    我的任务是编写一个greasemonkey脚本,因此更改服务器端的任何内容都不是一个选项。

    总之,javascript正在运行 /html 我愿意 比如让javascript代码添加一些关于 /html 从两者中提取 /html 和 /详情/item1.html . 我的问题是如何从 /详情/item1.html .

    我目前已经编写了提取链接的代码(例如 /详情/item1.html ) 并将其传递给一个方法,该方法应提取所需的信息(首先 就这样。来自某个分区的innerhtml正常,我可以稍后处理)。

    以下是我当前的尝试,但不起作用。有什么建议吗?

    function get_information(link)
    {
        var obj = document.createElement('object');
        obj.data = link;
        document.getElementsByTagName('body')[0].appendChild(obj)
        var some_id = document.getElementById('some_id');
        if (! some_id) {
            alert("some_id == NULL");
            return "";
        }
        return some_id.innerHTML;
    }
    
    3 回复  |  直到 16 年前
        1
  •  6
  •   jimbo    16 年前

    第一:

    function get_information(link, callback) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", link, true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4) {
                callback(xhr.responseText);
            }
        };
        xhr.send(null);
    }
    

    然后

    get_information("/details/item1.html", function(text) {
        var div = document.createElement("div");
        div.innerHTML = text;
        // Do something with the div here, like inserting it into the page
    });
    

    我还没有做过任何测试——从我的头顶上。牛传染性胃肠炎病毒

        2
  •  0
  •   Select0r    16 年前

    由于客户端(浏览器)中一次只存在一个页面,而所有其他(虚拟/可能)页面都在服务器上,您将如何使用javascript从另一个页面获取信息,因为您必须在某个时间点与服务器交互以检索第二个页面?

    如果可以的话,集成一些Ajax请求来加载第二个页面(并对其进行解析),但是如果这不是一个选项,我建议您必须加载 全部的 要同时从中提取信息的页,隐藏不想显示的位(在隐藏的div中?)然后把你的 index (或控制视图的人)从那里检索所需信息…尽管这听起来很令人毛骨悚然;)

        3
  •  0
  •   Tgr    16 年前

    您可以将页面加载到隐藏的iframe中,并使用普通的dom操作来提取结果,或者通过ajax获取页面的文本,在 <body...>...</body>¨ 并将其临时注入一个分区(第二个分区可能会因某些外来元素而失败,如 ins 尽管如此,我希望GreaseMonkey比普通的javascript具有更强大的功能,但这可能值得仔细阅读文档。