gpt4 book ai didi

javascript - 跨域 Javascript - 拉取元标记

转载 作者:行者123 更新时间:2023-11-30 05:47:59 27 4
gpt4 key购买 nike

我正在构建一个 Meteor.js 应用程序,我想做的其中一件事是从保存的页面中提取标题和元描述标签。我正在使用 this cross domain program并且有一半的代码可以工作。

这是摘录;它采用标记为“url”的表单中给出的值并运行代码:

$.get(url, function(response){
if ((suggestedTitle=((/<title>(.*?)<\/title>/m).exec(response.responseText))) != null){
$('#title').val(suggestedTitle[1]);
}else{
$('#title').val(url);
}
if ((suggestedDesc=($('meta[name=description]').attr('content'))) != undefined){
$('#desc').val(suggestedDesc[1]);
}else{
$('#desc').val('Description for this page cannot be found.');
}
});

我认识到使用正则表达式来解析 HTML 并不是最佳实践(接受关于替代方案的建议,但我没有仔细研究过)但除此之外,该脚本成功地从 URL 中提取标题或返回网址,如果找不到,但描述失败,只返回回退文本。希望得到一些帮助,谢谢 :)

最佳答案

不使用正则表达式或 jQuery 来解析响应,而是使用 DOM 方法来遍历响应文本。试试这个:

$.ajax({
url: "http://www.google.com",
type: "GET",
async: true
}).done(function (response) {
var div = document.createElement("div"),
responseText = response.results[0],
title, metas, meta, name, description, i;
div.innerHTML = responseText;
title = div.getElementsByTagName("title");
title = title.length ? title[0].innerHTML : undefined;
metas = div.getElementsByTagName("meta");
for (i = 0; i < metas.length; i++) {
name = metas[i].getAttribute("name");
if (name === "description") {
meta = metas[i];
description = meta.getAttribute("content");
break;
}
}
console.log("Title:", title);
console.log("Description:", description);
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log("AJAX ERROR:", textStatus, errorThrown);
});

演示: http://jsfiddle.net/KLdsG/3/

我把你提供的插件放在顶部(它被缩小了,所以它适合你仍然可以看到你自己的代码。

显然,这使用了 http://www.google.com,但是您应该能够将任何 URL 放入其中并且它的工作原理是一样的。此外,您可以将其放入可重用函数中——我只是想展示一个示例。我假设它与 $.get() 而不是 $.ajax() 的效果相同。

不能直接使用response.responseText,因为返回的item是由一些东西组成的对象。要获取 HTML,您可以使用 response.results[0]response.results 显然是一个数组,我不确定里面还有什么(比如索引 1、2、3 等)。

当我尝试使用 $(response.results[0]) 时,我发现奇怪的事情发生了,所以我坚持使用正常的 DOM 操作。

关于javascript - 跨域 Javascript - 拉取元标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com