【发布时间】:2014-10-19 06:10:36
【问题描述】:
我正在开发一个 Chrome 扩展程序(这个问题不需要任何知识......),当我访问具有特定域的页面时,我有一个正在运行的脚本。所做的就是从页面中的<meta> 标记中获取attribute 值:
$('meta[itemprop=contentURL]').attr('content')
这在第一个页面加载时效果很好。但是,位于页面内也有指向相关内容的链接。如果我单击其中一个相关链接,Chrome 微调器会旋转一点,加载新内容并更新地址栏中的 URL。
但是,如果我尝试上面的 jQuery,我会得到旧的属性值,而不是新页面上的新属性值。在使用 Chrome 的 Inspect Element 时,我看到旧属性值在那里,但如果我使用 view page source 代替,新属性值在那里。
所以看来 DOM 是旧的......有没有获得更新的 DOM 的好方法?这个问题与我查看过但没有得到任何答案的 DOM vs Page Source are different 线程的所有其他问题一起出现。
有没有一种好方法来获取具有更新属性的新 DOM?谢谢。
编辑:这是 chrome 扩展代码的样子:
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
// request current page , `cache:false`
$.ajax({url:window.location.href, cache:false})
.done(function(data) {
var content = $(data).filter("meta[itemprop=contentURL]").attr("content");
console.log(content);
});
});
以上代码记录undefined。除非建议的解决方案是最好的,否则仍在寻找一个好的解决方法。
【问题讨论】:
-
听起来您所在的页面正在通过 AJAX 动态更新可见内容,而不是导航到新页面。大多数网站不会费心更新元数据,因为机器人/等通常会重新请求页面。
-
@abraham - 感谢您的回复。这绝对是可能的,至少不会让我感到惊讶。有什么好的方法可以解决这个问题,或者下面的 guest271314 的回答是一个好方法吗?
-
在检查中看不到更新信息的事实意味着它没有在 DOM 中更新。您的内容脚本无法访问“更新”信息。当您调试它时,建议的解决方案可能会起作用 - 它会为该 URL 创建一个新请求(就像“查看源代码”一样)。不过,我会寻找其他方法来找到您需要的东西。
-
我能想到的唯一其他解决方案是刷新选项卡(因为 URL 已更新),然后再次发送内容脚本。
-
@joshft91 这可能是一个非常不和谐的用户体验。
标签: javascript jquery dom google-chrome-extension