提交前Xcode测试Safari扩展遇资源加载权限问题求助
问题核心
在Xcode测试Safari Web扩展时,加载DataJ/diqo.txt文件报错:
Failed to load resource: You do not have permission to access the requested resource.
该扩展在Chrome、FireFox中运行正常,已通过xcrun safari-web-extension-converter ... --copy-resources --macos-only导入Xcode,Manifest v2中配置了"web_accessible_resources": [ "diqo.txt" ]。
排查与解决步骤
修正Manifest路径配置
代码中加载路径是DataJ/diqo.txt,但Manifest里只写了diqo.txt,Safari对资源路径的匹配要求比Chrome/FireFox严格,必须完全一致。把Manifest的配置改成:"web_accessible_resources": [ "DataJ/diqo.txt" ]注意:如果
chargerLexique函数是在扩展自身上下文(后台脚本、弹出页)运行,其实不需要配置web_accessible_resources(这个配置是给外部网页访问扩展资源用的),这时优先检查路径和资源打包状态。确认Xcode中资源的打包状态
- 打开Xcode项目,左侧文件导航栏里找到
DataJ文件夹,检查diqo.txt是否存在; - 选中
diqo.txt,查看右侧Identity and Type面板,确认Target Membership已勾选你的Safari扩展目标; - 如果资源未正确导入,手动将
DataJ文件夹拖进Xcode,选择"Copy items if needed"并勾选对应目标。
- 打开Xcode项目,左侧文件导航栏里找到
调试资源实际访问路径
在chargerLexique函数里先打印生成的资源URL,确认路径是否正确:const chargerLexique = async () => { try { const resourceUrl = browser.runtime.getURL('DataJ/diqo.txt'); console.log("实际资源URL:", resourceUrl); // 打印URL用于排查 const response = await fetch(resourceUrl); // ... 后续逻辑 } catch (error) { console.error("词典加载错误:", error); } };打开Safari开发者工具,查看扩展的资源列表,对比打印的URL是否能找到对应文件。
尝试Manifest配置增强(针对网页上下文访问场景)
如果是网页端需要访问该资源,可修改Manifest为更明确的格式,指定允许访问的来源:"web_accessible_resources": [ { "resources": ["DataJ/diqo.txt"], "matches": ["<all_urls>"] } ]
内容的提问来源于stack exchange,提问作者MarioCha

