Цитата:
проверить на тип 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, время: 05:07. |