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

iOS 15下Safari iOS应用扩展的popup.js如何获取活跃标签页URL

iOS 15+ Safari扩展Popup获取当前标签页URL解决方案

问题根因

你之前的两种写法都不适配iOS端Safari Web扩展的运行规则:

  1. safari.application.activeBrowserWindow.activeTab.url 是桌面端Safari的旧兼容API,iOS端Safari并未实现该接口,因此返回空值。
  2. document.URL 读取的是扩展popup页面本身的本地文件路径,popup和浏览器标签页是完全隔离的上下文,无法直接读取标签页属性。

修复步骤

1. 更新manifest.json权限配置

你需要新增tabs权限以及站点访问权限:
如果使用Manifest V3:

"permissions": ["nativeMessaging", "activeTab", "tabs"],
"host_permissions": ["<all_urls>"]

如果使用Manifest V2,直接将站点权限加入permissions数组:

"permissions": ["nativeMessaging", "activeTab", "tabs", "<all_urls>"]

如果不需要匹配所有站点,可将<all_urls>替换为你实际需要支持的URL匹配规则。

2. 替换popup.js实现代码

iOS Safari Web扩展兼容标准的跨浏览器chrome.tabs异步API,使用如下代码获取活跃标签页URL:

document.addEventListener('DOMContentLoaded', async () => {
  const el = document.getElementById("appresponse");
  try {
    // 查询当前窗口的活跃标签
    const [activeTab] = await chrome.tabs.query({
      active: true,
      currentWindow: true
    });
    // 优先用textContent避免XSS风险,有HTML渲染需求再换innerHTML
    el.textContent = activeTab.url;
  } catch (e) {
    el.textContent = `获取失败: ${e.message}`;
  }
});

3. 验证系统权限

你现有的Info.plist配置无需改动,只需确认:

  • 扩展安装后在Safari设置中已开启「允许访问所有网站」权限,或给对应站点手动开启访问权限
  • 首次调用API时弹出的权限申请框点击同意

排查提示

如果仍无法获取,可以通过Safari开发菜单连接iOS设备/模拟器的扩展popup上下文,查看控制台输出的具体报错信息定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:04