如何获取当前的 Chrome URL?

Posted

技术标签:

【中文标题】如何获取当前的 Chrome URL?【英文标题】:How can I get the current Crome URL? 【发布时间】:2021-08-02 19:37:03 【问题描述】:

我正在 C# 上编写 Windows 窗体应用程序,并尝试在此应用程序中从 Chrome 获取当前 URL。我找到了活动进程,如果它的名称是“chrome”,我会尝试任何方法,但都没有成功。我发现的所有解决方案仅适用于以前版本的 Chrome。据我了解,最好使用谷歌浏览器扩展(但我​​从来没有写过它们,而且我对 JS 很熟悉)。

所以,我试着写一个扩展:

manifest.js:


"manifest_version": 3,
"name": "URL collector",
"version": "0.11",
"description": "Собирает URL посещенных ресурсов",
"permissions": [
    "tabs",
    "activeTab",
    "webNavigation",
    "scripting"
],
"background": 
    "service_worker": "background.js"
  ,
"content_scripts": [
    
        "matches": [
            "http://*/*",
            "https://*/*"
        ],
        "js": [
            "app.js"
        ]
    
]

background.js:

chrome.runtime.onInstalled.addListener(() => 
async function getCurrentTab() 
    let queryOptions =  active: true, lastFocusedWindow: true ;
    let [tab] = await chrome.tabs.query(queryOptions);
    return tab;

alert(window.getCurrentTab()););

app.js:

chrome.tabs.query(active: true, lastFocusedWindow: true, function(tabs) 
var tab = tabs[0];
console.log(tab.url);
alert(tab.url););

我也试过这样的代码:

;(function() 
var pushState = history.pushState;
var replaceState = history.replaceState;

history.pushState = function() 
    pushState.apply(history, arguments);
    window.dispatchEvent(new Event('pushstate'));
    window.dispatchEvent(new Event('locationchange'));
;

history.replaceState = function() 
    replaceState.apply(history, arguments);
    window.dispatchEvent(new Event('replacestate'));
    window.dispatchEvent(new Event('locationchange'));
;

window.addEventListener('popstate', function() 
    window.dispatchEvent(new Event('locationchange'))
);)();

window.addEventListener('locationchange', function()
    console.log('onlocationchange event occurred!');
    alert(chrome.tabs.getCurrent(tab => tab.url));)

我在 app.js 中尝试过的所有内容我也在 background.js 中尝试过,反之亦然。要么我不明白如何跟踪扩展触发,要么它不起作用(可能是第二个)。通常,我尝试捕获 URL 更改事件,例如,切换选项卡或点击链接。好吧,到目前为止,什么都没有发生。其实第一个问题是这样的:如何做这样的Extension?

看来,我完全不明白这个话题,因此我也将非常感谢相关资料的链接。

那么,第二个问题是,将 URL 传递给 Windows 窗体应用程序的最佳方法是什么?

对不起,我的英语好像真的很糟糕。

【问题讨论】:

您当前的代码无济于事。使用 chrome.webNavigation 事件监听器。 【参考方案1】:

在我的 app.js 中,我使用的是 current.Window 而不是 lastFocusedWindow

button_element.addEventListener('click', () =>     
    chrome.tabs.query(active: true, currentWindow: true, function(tabs)
        arr.push(tabs[0].url)
        localStorage.setItem("example", JSON.stringify(arr) )
        render(arr)
    )
)

这适用于将当前标签推送到本地存储

【讨论】:

以上是关于如何获取当前的 Chrome URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php 或 javascript 获取所有浏览器中当前打开的选项卡的 url?

获取当前 URL 并使用 chrome 扩展保存它

使用 C# 从 Google Chrome 获取当前标签页的 URL

如何从 Chrome 和 Firefox 获取打开页面的 URL?

在 chrome 扩展中,如何从当前 chrome 用户以外的 gmail 用户获取访问令牌?

如何获取 Chrome / WebKit 中过渡的元素的当前颜色?