В моем скрипте контента есть две функции: injectChat и firstTimeTrigger. Они оба прикрепляют скрипт к телу DOM.
Мне нужно сначала запустить injectChat, а после его полного завершения загрузить firstTimeTrigger. firstTimeTrigger не работает, если injectChat не запущен и полностью загружен.
Это две функции -
function injectChat(){
console.log("Injecting Chat");
const script = document.createElement('script');
script.setAttribute("type","text/javascript");
script.setAttribute("src", `${host}/api/botpress-platform-webchat/inject.js/`);
script.setAttribute("id", 'botpress-script');
document.body.appendChild(script);
script.addEventListener('load', function(){
const botpress_settings = `window.botpressWebChat.init({host: '${host}'})`;
const settings = document.createElement('script');
settings.setAttribute("id", "botpress-settings");
settings.innerHTML = botpress_settings;
document.body.appendChild(settings);
});
};
function firstTimeTrigger(){
console.log("First Time Trigger");
chrome.runtime.sendMessage({type: "isFirstTime"}, function(response) {
if(response == true){
const botpress_trigger_1 = "window.botpressWebChat.sendEvent({ type: 'show' })";
const botpress_trigger_2 = `window.botpressWebChat.sendEvent({ type: 'proactive-trigger', platform: 'web', text: '${JSON.stringify(config)}' })`;
const trigger = document.createElement('script');
trigger.innerHTML = botpress_trigger_1 + '\n' + botpress_trigger_2;
document.body.appendChild(trigger);
}
});
};
В настоящее время я делаю это так
injectChat();
setTimeout(function(){
firstTimeTrigger();
}, 3000);
Но это очень ненадежно из-за разного времени загрузки страницы из-за того, что он находится внутри скрипта контента.
Как мне это сделать? Обещания здесь не работают.