如何让Chrome历史记录忽略URL的一部分
由于我的工作涉及到从一个网站上查看许多项目,我需要知道哪些项目已被访问,哪些未被访问,以避免重复查看 问题是这些项目的URL包含一些动态变化的垃圾参数。这意味着浏览器的历史记录在识别哪些项目已经被查看时几乎毫无用处 这是URL的一个示例: 只有“item_id=e6de72e”部分可用于识别每个项目。其他参数是动态垃圾 我的问题是:如何让Chrome仅将“example.com/showtItemDetail/?item_id=e6de72e”部分标记为已访问,而忽略其余参数 请注意,我不想修改URL,因为这可能会使网站服务器怀疑我滥用了他们的数据库。我希望垃圾参数仍然存在,但浏览器历史记录机制会忽略它们 我知道这不容易。我正在提出一个可能的解决办法,但不知道能否实施。是这样的: 步骤:1)一个扩展背景脚本,用于从我打开的每个页面提取项目id,然后将其存储在字符串集合中。这个字符串集合应该保存在某个文件中 步骤:2)每次打开包含各种项目列表的网页时,后台脚本都会验证每个URL是否包含与上述集合中的任何一个匹配的字符串。如果是这样,该URL将自动添加到历史记录中。然后该项目自然会显示为已访问 逻辑听起来正常吗?如果是这样,如何通过简单的扩展来实现它如何让Chrome历史记录忽略URL的一部分,url,google-chrome-extension,browser-history,Url,Google Chrome Extension,Browser History,由于我的工作涉及到从一个网站上查看许多项目,我需要知道哪些项目已被访问,哪些未被访问,以避免重复查看 问题是这些项目的URL包含一些动态变化的垃圾参数。这意味着浏览器的历史记录在识别哪些项目已经被查看时几乎毫无用处 这是URL的一个示例: 只有“item_id=e6de72e”部分可用于识别每个项目。其他参数是动态垃圾 我的问题是:如何让Chrome仅将“example.com/showtItemDetail/?item_id=e6de72e”部分标记为已访问,而忽略其余参数 请注意,我不想修
当然,如果你有其他更简洁的解决方案,我会非常有兴趣去学习。假设指向项目的链接总是有项目id,那就行了,是的 您需要执行以下步骤: 记录元素
a[href*=”example.com/showitemdetail/?item_id=“]
,它将选择href包含该URL部分的所有链接/(?:项目id=)(.*?(:&$)/
。这将匹配前面带有项_id=(未捕获)的所有字符,直到它找到字符串的&或结尾(以先发生且未捕获的为准)我希望这能让你领先一步。也许你可以试一试,如果你不能让它发挥作用,你可以提出一个新的问题,说明你的困境。非常感谢,fvbuendia。经过反复试验,我成功了。 我不会在这里发布所有代码,但会给出一些提示供其他用户参考: 1) 要获取新打开网页的URL并提取ID,请使用chrome.tabs.onUpdated.addListener和extractedEditEMID=tab.URL.replace(/…../,…) 2) 然后使用chrome.storage.local.set和chrome.storage.local.get将ID保存到storage.local。ID应保存到对象数组中
- 1) 和2)应该写在背景脚本中
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if(changeInfo.status == "complete") {
if(tab.url.indexOf("some string typical of the item list page URL") > -1) {
chrome.tabs.executeScript(null, { code: 'getalltheurls();' });
} }
});
4) 要在内容脚本中执行的函数:
function getalltheurls() {
var urls = [];
var links = document.links;
for (var i = 0; i < links.length; i++) {
if(links[i].href.indexOf("some string typical of the item list URLs") > -1) { urls.push(links[i].href);}
}
chrome.runtime.sendMessage({ urls: urls });
};
6) 然后后台使用chrome.storage.local.get获取本地存储,并检查这些ID是否在存储阵列中。如果是,请将URL添加到历史记录中
for (var i = 0; i < urls.length; i++) {
if (storedIDs.indexOf(idinlist) > -1 ) { chrome.history.addUrl({ url: urls[i] }); }
}
for(var i=0;i-1){chrome.history.addUrl({url:url[i]});}
}
谢谢你,fvbuendia。虽然我需要花相当长的时间来弄清楚如何使用这些API,但知道正确的方法仍然可以节省大量的尝试和错误工作。我现在就要开始我的精彩课程了。当你开始尝试和进步时,请毫不犹豫地回来提出新的问题,以便我们能够提供帮助;)然而,你必须先尝试!
for (var i = 0; i < urls.length; i++) {
if (storedIDs.indexOf(idinlist) > -1 ) { chrome.history.addUrl({ url: urls[i] }); }
}