如何为CefSharp浏览器加载扩展?加载成功后无运行效果怎么办
修复方案
1. 修正ExtensionHandler的方法返回值
你当前IExtensionHandler实现中的多个方法返回值不符合预期,直接导致扩展背景页无法创建、资源无法加载:
OnBeforeBackgroundBrowser返回true代表取消创建扩展背景页,必须改为返回false才能正常初始化扩展的后台运行环境GetExtensionResource返回true代表你会自行处理扩展资源请求,需要改为返回false让CEF默认读取扩展目录下的实际文件OnBeforeBrowser没有自定义窗口需求时也需要返回false,避免注入脚本的目标页面创建被拦截
修改后的ExtensionHandler核心代码:
public class ExtensionHandler : IExtensionHandler { public bool CanAccessBrowser(IExtension extension, IBrowser browser, bool includeIncognito, IBrowser targetBrowser) { return true; } public void Dispose() { } public IBrowser GetActiveBrowser(IExtension extension, IBrowser browser, bool includeIncognito) { return browser; } public bool GetExtensionResource(IExtension extension, IBrowser browser, string file, IGetExtensionResourceCallback callback) { // 改为false让CEF默认加载扩展资源 return false; } public bool OnBeforeBackgroundBrowser(IExtension extension, string url, IBrowserSettings settings) { // 改为false允许创建背景页 return false; } public bool OnBeforeBrowser(IExtension extension, IBrowser browser, IBrowser activeBrowser, int index, string url, bool active, IWindowInfo windowInfo, IBrowserSettings settings) { browser.ShowDevTools(); // 无自定义窗口需求返回false return false; } public void OnExtensionLoaded(IExtension extension) { } public void OnExtensionLoadFailed(CefErrorCode errorCode) { } public void OnExtensionUnloaded(IExtension extension) { } }
2. 补充CEF初始化的核心扩展开启参数
你当前的命令行参数缺少开启扩展支持的核心配置,在CEF初始化的CefCommandLineArgs中新增:
settings.CefCommandLineArgs.Add("enable-extensions");
3. 修正background.js的executeScript调用
CefSharp中chrome.tabs.executeScript必须显式指定tabId才能正确注入到对应标签页,修改你的background.js代码:
chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) { // 新增tabId作为第一个参数 chrome.tabs.executeScript(tabId, { code: 'console.log("console.log from extension");' }); chrome.tabs.executeScript(tabId, { code: 'alert("alert from extension");' }); });
4. 确认请求上下文一致性
你为浏览器实例单独创建的RequestContext必须和加载扩展时使用的是同一个实例,不要在加载扩展后修改浏览器的RequestContext配置,确保扩展和目标页面在同一个上下文环境中。
调试验证
你已经开启了8080端口的远程调试,修改完成后访问http://localhost:8080即可看到所有运行的CEF进程,包括扩展的背景页,点击进入可查看背景页的控制台报错信息,进一步定位问题。
内容的提问来源于stack exchange,提问作者Ivan Demchenko
相关产品推荐
相关产品推荐

