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

Chrome扩展executeScript调用Dynamics CRM的XRM JS API不生效问题

问题原因

Chrome扩展通过chrome.scripting.executeScript默认注入的脚本运行在隔离执行环境(ISOLATED world),和目标页面的全局作用域完全隔离,无法直接访问页面挂载的Xrm全局对象,而Chrome控制台默认运行在页面主上下文,所以能直接调用Xrm API。

解决方案

方案1:指定执行上下文为页面主环境(推荐,Manifest V3支持)

直接在executeScript参数中添加world: "MAIN"配置,让注入代码运行在页面主上下文,即可直接访问Xrm对象:

chrome.tabs.query({ currentWindow: true, active: true }, function(tabs) {
  chrome.scripting.executeScript({
    target: { tabId: tabs[0].id },
    world: "MAIN", // 核心配置:切换到页面主执行上下文
    func: () => {
      Xrm.Utility.alertDialog("Hello world", () => { });
    }
  });
});

注意要确保你的manifest.json中host_permissions已经添加了Dynamics CRM站点的匹配规则,例如"https://*.crm.dynamics.com/*"。

方案2:注入script标签到页面DOM执行

如果需要兼容旧版本扩展,也可以通过在隔离环境中动态插入script标签的方式,让代码在页面主上下文执行:

chrome.tabs.query({ currentWindow: true, active: true }, function(tabs) {
  chrome.scripting.executeScript({
    target: { tabId: tabs[0].id },
    func: () => {
      const runScript = document.createElement('script');
      runScript.textContent = 'Xrm.Utility.alertDialog("Hello world", () => { })';
      document.body.append(runScript);
      runScript.remove();
    }
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:15:03