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

iOS 17.4.1 Safari扩展内容脚本初始化及通信异常求助

针对iOS 17.4.1 Safari扩展内容脚本与通信异常的解决方案

临时规避方案

  • 强制触发扩展激活:遇到无响应时,打开Safari地址栏右侧的扩展菜单,点击你的扩展图标后关闭,多数情况下能唤醒内容脚本初始化与通信链路。
  • 标签页重载策略:若当前标签页扩展失效,关闭标签页后重新打开;若仍无效,切换到其他网站标签页再切回,利用Safari标签页生命周期触发扩展重新注入。

代码层面适配调整

  • 调整内容脚本注入时机:将注入时机从document_start改为document_idle,规避iOS 17.4.1页面加载时序问题导致的注入失败:
    // 在Info.plist的SFSafariContentScript数组中修改配置
    {
      "script": "content.js",
      "run_at": "document_idle"
    }
    
  • 添加通信链路容错机制:在内容脚本中主动发送初始化确认消息,后台脚本增加消息重试逻辑,确保双向通信链路建立:
    // 内容脚本 content.js
    document.addEventListener('DOMContentLoaded', () => {
      safari.extension.dispatchMessage('content_ready', { tabId: safari.self.tab.id });
    });
    
    // 后台脚本 background.js
    let isContentReady = false;
    safari.application.addEventListener('message', (event) => {
      if (event.name === 'content_ready') {
        isContentReady = true;
        event.target.page.dispatchMessage('init_data', { /* 初始化数据 */ });
      }
    });
    
    // 带重试的消息发送函数
    function sendMessage(tab, name, data) {
      if (!isContentReady) {
        setTimeout(() => sendMessage(tab, name, data), 500);
        return;
      }
      tab.page.dispatchMessage(name, data);
    }
    
  • 确认网站访问权限:检查Info.plist中的SFSafariWebsiteAccess配置,确保覆盖所有网站,避免权限限制导致注入失败:
    <key>SFSafariWebsiteAccess</key>
    <dict>
      <key>Include</key>
      <array>
        <string>*</string>
      </array>
    </dict>
    

官方问题反馈

通过苹果开发者反馈平台提交问题,附上你的测试扩展代码、设备型号、iOS版本及复现步骤,推动官方修复该系统级问题。

内容的提问来源于stack exchange,提问作者Abdus-Samad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:11:00