【发布时间】:2015-08-25 03:35:10
【问题描述】:
我正在开发一个 Chrome 扩展程序,它在特定条件下执行 $.ajax() 请求,然后使用返回的 HTML 中特定元素的信息。现在,我只是想让它访问特定元素并将其记录到控制台以确保它正常工作。
首先,我相当确定HTML 已成功检索。当我直接记录结果时,输出与我在 Chrome 中查看页面源时的结果相同。我也尝试过使用$.parseHTML(),它在登录时会为我提供一系列顶级子项。使用选择器会返回与选择器匹配的直接子元素的数组,但它们不适用于这些子元素的子元素(等等)。
我已经看过几个帖子,并尝试了各种方法,例如使用$(<selector>,<context>)、$(<result>).filter(<selector>) 和$(<result>).find(<selector>),但均无济于事。每次我尝试记录这些时,我都会得到一个长度为 0 的对象。
$.ajax({jsonp: false, dataType: "html",url: getUWFlowLink($(this).attr('href')), success: function(siteHTML){
console.log($("p.description",siteHTML));
console.log($("p.description",$.parseHTML(siteHTML)));
console.log($(siteHTML).find("p.description"));
console.log($($.parseHTML(siteHTML)).find("p.description"));
console.log($(siteHTML).filter("p.description"));
console.log($($.parseHTML(siteHTML)).filter("p.description"));
}});
所有这些日志都只返回具有0 长度的对象。尝试记录.html() 会导致输出undefined,尝试记录.text() 会导致输出为空字符串。一个示例页面,供参考是here。我试图访问的元素是顶部的描述信息(“应用程序的化学原理......”),它在 HTML 中的位置(深几级)可以通过检查元素找到。
【问题讨论】:
-
你可能有跨域问题?
-
我不太确定——这是我第一次使用 JQuery,更不用说 chrome dev 和 ajax。但据我所知,当站点被放入清单的权限并且您指定
jsonp:"false"时,可以使用chrome 扩展跨域。尽管我不是 100% 的,但 HTML 似乎已成功检索。 -
如果您从不同的域加载 HTML 文件而不是 ajax 调用,并且您没有在服务器上进行特殊设置,您将遇到跨域问题。数据会发送到浏览器,但浏览器不会让 javascript 拥有它。
标签: jquery html ajax google-chrome-extension jquery-selectors