You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断焦点在地址栏或窗口,并获取对应选中文本(含地址栏)?

检测地址栏焦点并获取对应选中文本

首先得明确一个核心限制:普通网页的JavaScript代码完全无法访问浏览器地址栏的焦点状态或选中内容。这是浏览器的安全策略,目的是防止恶意网站窃取用户在地址栏输入的敏感信息(比如未访问的网址、账号密码等)。

所以分两种场景来解决你的问题:

1. 普通网页环境(非浏览器扩展)

这种情况下,你只能获取网页内容区域的选中文本,也就是用你已经知道的window.getSelection().toString()。至于地址栏的选中内容,网页脚本没有权限触及,也没办法判断焦点是否在地址栏——因为浏览器会把地址栏的状态完全隔离在网页的DOM环境之外。

2. 浏览器扩展环境(Chrome/Firefox等)

只有扩展拥有访问浏览器UI相关API的权限,才能处理地址栏的场景,具体步骤如下:

第一步:判断焦点位置

你可以通过扩展的content script注入到页面中,检查页面是否获得焦点:

// content.js 中执行
const isPageFocused = document.hasFocus();
  • 如果isPageFocused为true:说明焦点在网页内容里,直接用window.getSelection().toString()获取选中文本即可。
  • 如果isPageFocused为false:说明焦点可能在浏览器的UI元素(地址栏、书签栏、工具栏等),接下来需要进一步确认并获取地址栏的选中内容。

第二步:获取地址栏的选中文本

目前主流浏览器没有直接获取地址栏选中内容的API,但可以通过以下两种方式间接实现:

方式一:利用上下文菜单

创建一个仅在地址栏上下文显示的菜单,当用户右键点击地址栏中选中的文本时,触发菜单并获取选中内容:

// background.js 中执行
chrome.contextMenus.create({
  id: "getOmniboxSelection",
  title: "获取地址栏选中内容",
  contexts: ["omnibox"] // 指定仅在地址栏右键时显示
});

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === "getOmniboxSelection") {
    const selectedText = info.selectionText;
    // 这里可以处理获取到的地址栏选中文本
    console.log("地址栏选中内容:", selectedText);
  }
});

方式二:结合快捷键与标签页信息

如果你的扩展需要通过快捷键触发获取操作,可以先检查页面是否失焦,再结合当前标签页的URL来处理(这种方式适合用户选中地址栏中现有URL的部分内容的场景):

// background.js 中执行
chrome.commands.onCommand.addListener((command) => {
  if (command === "get-selected-text") {
    chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
      // 注入脚本检查页面是否聚焦
      chrome.scripting.executeScript({
        target: {tabId: tabs[0].id},
        func: () => document.hasFocus()
      }, (results) => {
        const isPageFocused = results[0].result;
        if (isPageFocused) {
          // 获取页面选中文本
          chrome.scripting.executeScript({
            target: {tabId: tabs[0].id},
            func: () => window.getSelection().toString()
          }, (textResults) => {
            console.log("页面选中内容:", textResults[0].result);
          });
        } else {
          // 假设焦点在地址栏,这里可以结合当前URL处理,或者提示用户右键使用上下文菜单
          console.log("焦点在地址栏,可通过右键菜单获取选中内容");
          // 如果需要获取完整URL,可使用 tabs[0].url
        }
      });
    });
  }
});

需要注意的是,即使是扩展,也不能主动监听地址栏的焦点变化或选中事件,只能通过用户触发的操作(比如右键菜单、快捷键)来间接获取内容,这也是浏览器安全限制的一部分。

内容的提问来源于stack exchange,提问作者Chintan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:00:00