#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
недоступен.
Ответ №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/*" ] } ]