Расширение Chrome executeScript не запускает JavaScript XRM

#javascript #reactjs #typescript #google-chrome-extension

Вопрос:

У Dynamics CRM есть свои собственные API-интерфейсы XRM JS, которые я пытаюсь выполнить в расширении Chrome, над которым я работаю. Я использую приведенный ниже код.

 chrome.tabs.query({ currentWindow: true, active: true }, function(tabs) {  chrome.scripting.executeScript({  target: { tabId: tabs[0].id },  func: () =gt; {  Xrm.Utility.alertDialog("Hello world", () =gt; { });  }  }); });  
 Xrm.Utility.alertDialog("Hello world", () =gt; { });  

Этот код просто показывает окно сообщения на экране Dynamics CRM с использованием этого метода Dynamics API.

Если я запущу этот код в консоли Chrome, он отобразит сообщение правильно. Если я просто поставлю alert("Hello world")" , этот код также запустится, что подтверждает, что executeScript он работает нормально, но почему-то Xrm недоступен.

Манифест.json введите описание изображения здесь

Ответ №1:

После того, как я несколько раз переполнил стек, я узнал, что внедрение сценария должно происходить путем явного создания тега сценария и введения его в тело страницы. аналогично приведенному ниже коду.

 function runOnXrmPage() {   // create a script tag  var s = document.createElement('script');  s.src = chrome.runtime.getURL('webscript.js');  s.onload = function () {  this.remove();  };  (document.head || document.documentElement).appendChild(s);  }  chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {  chrome.scripting.executeScript({  target: { tabId: tabs[0].id },  func: () =gt; {  runOnXrmPage();  }  }); });    

Весь код Xrm был помещен в webscript.js файл, а манифест был обновлен, как показано ниже.

 "web_accessible_resources": [  {  "resources": [ "webscript.js" ],  "matches": [ "https://*.crm.dynamics.com/*" ]  }  ]