Цитата:
проверить на тип undefined лучше typeof L === "undefined"или !!(L) еще лучше проверять на конкретный тип typeof L === "number" второе условие вообще безобразно - чем вам так объект Date не понравился, что вы его на 1000 делите? )) если по-вашему, то if ( !(typeof === "undefined") && L > Math.round(Date.now()/1000) ) |
Цитата:
не назначайте ее, если не надо или function(){} укажите |
Цитата:
maps.js каким образом подключается к страницам? |
Цитата:
Цитата:
|
это eventPage.js (по-вашему background)
list = ['google.ru','mail.ru','yandex.ru']; //chrome.webNavigation.onDOMContentLoaded.addListener(onNavigate); chrome.webNavigation.onCompleted.addListener(onNavigate); function onNavigate(details){ var len = list.length; var tabID = details.id; var tabUrl = details.url.replace(/^https?\:\/\/(www\.)?/, ''); for (var i=0; i < len; i++){ if( tabUrl.startsWith(list[i]) ){ if (details.frameId != 0) break; /*иначе, например, bing "съедает" две загрузки, те msg будет показан 2*/ var siteName = list[i]; var msg = list[i]; chrome.tabs.insertCSS(tabID, {file:"css/content_style.css"}); chrome.tabs.executeScript(tabID, {file: "js/content_script.js"}); tabConnect({msg_:msg, name_:siteName}); }; }; function tabConnect(msg) { chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { var port = chrome.tabs.connect(tabs[0].id); port.postMessage(msg); port.onMessage.addListener(function getResp(response){ if(response.close_){ sessionStorage.setItem(response.name_, 3); }; }); }); }; а это в том самом скрипте, который вживляется в указанные в массиве сайты нексолькими строками выше, так называемый content_script.js var siteName; var portName; var div = document.createElement('div'); chrome.runtime.onConnect.addListener(function(port) { portName = port; port.onMessage.addListener(function(msg) { if(msg.msg_) showMessage(msg.msg_); if(msg.name_) siteName = msg.name_; }); }); function showMessage(msg){ div.className = "injection"; div.innerHTML = '<p class="inj_message">' + msg + '</p>'; div.addEventListener('click', clickHandler); document.body.appendChild(div); }; function clickHandler(){ document.body.removeChild(div); portName.postMessage({name_:siteName, close_:true}); }; я, конечно, свой код покрамсал и поэтому могут быть ошибки, но суть такова: сообщение - ответ. если надо длительное общение поддерживать, то лучше создавать именованный канал и не забывать его закрывать, а то скрипты так и будут висеть. |
Цитата:
Цитата:
Math.round(Date.now()/1000) Я уже поменял, просто писал это до того как посмотрел другую тему. Цитата:
Вешается на "невидимую" вкладку. Он нужен, т.к. приложение - бот для онлайн игры. Он работает даже когда нет открытых вкладок с самой игрой. maps.js подключается в манифесте через указанный адрес. Цитата:
Просто мало того, что там всё по английски(гугл перевод конченный), так ещё терминами непонятными сыпят. Ничего не понятно, я не могу ничего там найти, из того, что мне нужно... Спасибо, понял теперь в чём дело. )) Цитата:
Ну и в принципе мне обычного хватит вполне. Т.к. страницы открываются/закрываются... Суть вот в чём, открываю страницу сайта("карта", к ней и подгружается maps.js), получаю 3 ячейки из фонового скрипта(background.js) с настройками. Далее несколько проверок(есть ли задания гильдии наёмников, они либо висят доступные либо сданы и нужно подождать минут 20 до следующего) - запрос на другую страницу(самой гильдии, там пишут доступно или нет и сколько ждать), проверка, вывод посередине страницы части страницы из запроса. Вот я сейчас на этапе "оптимизации" этого не единственного функционала приложения. На странице карты можно узнать взято или нет задание, а остальное только запросом. Чтобы не делать каждый раз запрос(при обновлении карты, а она постоянно в работе), я создал ячейку в памяти и храню в ней время когда будет доступно задание(1й запрос всё - таки делается, чтобы узнать это время). Ну и вот, только на клиентской стороне всё считается... |
Во, всё заработало:
chrome.runtime.onMessage.addListener ( function(request, sender, sendResponse) { switch(request.id) { case 4: // Получить значение localStorage { var sid = request.sid sendResponse({sid: sid, value: localStorage[sid]}) return false break } case 6: // Гн { var l = localStorage['mercenary_guild'] if(l != undefined && l > Math.round(Date.now() / 1000)) break alert('запрос') GetHttpRequest(request.href, {rid: request.rid, response: sendResponse}) break } } return true } ) |
А если нужно несколько раз вернуть ответ(асинхронно), то никак не получится?
Т.е. я 1 раз посылаю сообщение в другой скрипт, а тот что - то там делает, и отправляет ответы, при необходимости... Цитата:
Долгоживущее соединение не поможет? |
Артист, таким образом - да.
Для более сложного "постоянного" общения есть connect. |
Спасибо )
|
Часовой пояс GMT +3, время: 13:28. |