Бьюсь уже третий день не могу найти решение.
Делаю свое приложение под хром. И наткнулся на проблему которую не получается обойти. Смысл такой. От верхней функции получаю callback по ходу обработки функции нужно вызвать несколько своих. На первом уровне callback срабатывает, но как только ставлю его во вложенную функцию он перестает работать. Думаю это как то связано с асинхронностью, но не могу понять как это можно обойти. Вот код
# Функция из которой получаем sendResponse chrome.runtime.onMessage.addListener(function ЛовимВызовыСоСтраницы(request, sender, sendResponse){ chrome.tabs.query({pinned:true, "url":request.location.url}, function ПроверкаСвойстТаба(tabs){ if(tabs.length){ chrome.tabs.update(tabs[0].id, {selected: true}); chrome.tabs.reload(tabs[0].id); }else{ chrome.tabs.create({pinned:true, url:request.location.url}, function СозданиеТаба(tab){ chrome.tabs.onRemoved.addListener(function ПолучаемСвойстваВкладки(tabId){ chrome.tabs.update(sender.tab.id, {selected: true}); console.log("onRemoved:", (new Date().getTime())); ################################################### # Если ставим сюда, то не работает. А нужно здесь. Ниже работает ################################################### sendResponse({storage:localStorage}); }) request.location.tab = tab; if(localStorage["location"].length == 0){ localStorage["location"] = JSON.stringify([request.location]); }else{ var location = JSON.parse(localStorage["location"]); location.push(request.location); localStorage["location"] = JSON.stringify(location); } console.log("localStorage.location:", localStorage.location); }); }; return true; }); console.log("query:", (new Date().getTime())); ################################################### # Если ставим sendResponse здесь он работает, но мне надо поставить его выше ################################################### sendResponse({storage:localStorage}); В общем такая заморочка. Бьюсь уже не один день. Названия русских функция на работу не сказываются. Сделано так, ради удобства чтобы в дебагере иметь возможность отличать одну безымянную функцию от другой. Функции с русскими именами в вызовах не используются. В документации находил информцаии о вставке в функцию return true типа после этого она начинает работать асинхронно, но у меня куда бы я не ставил добиться асинхронности не получилось. Здесь описание метода onMessage https://developer.chrome.com/extensi...e-sendResponse А еще есть баги. Не могу понять исправлены они или нет https://code.google.com/p/chromium/i...tail?id=330415 https://groups.google.com/a/chromium...ns/C9RQuRWddj4 |
Тебе нужно добавить "return true;" в конец функции "ЛовимВызовыСоСтраницы"
|
Цитата:
|
Надо из 33 строки убрать нахрен вызов sendResponse и воткнуть туда return true.
Тогда sendResponse на 15 строке нормально отправит данные. Но sendResponse в любом случае должен вызваться. А если условие на 4 строке истинно, он не вызовется. |
Ставить выход пробовал. Это не прокатывает. Этот способ описан много где, но под моим бразуером Ubuntu Linux Chromium он не сработал. Возможно какой то баз конкретно моей сборги хромиума.
|
Часовой пояс GMT +3, время: 12:02. |