2013-11-10 4 views
0

У меня возникает небольшая проблема при создании нового объекта на странице параметров.Потеря ссылки:

На странице параметров параметров я создаю несколько объектов и сохраняю их как общие настройки. Эти объекты имеют способ связи с различными API. Но как только я получаю один из этих объектов для работы, я теряю контекст на странице.

Например:

страница параметров создать объект, который имеет метод «запрос», и я отправить AJAX запрос к некоторому ИПН с помощью этого метода. Когда я вызываю это на другой странице, запрос ajax регистрируется на странице параметров. Когда я закрываю страницу параметров, я теряю весь контекст журналов, которые он делает.

Есть ли способ принудительно ссылаться на текущую страницу? или я сделал ошибку при создании объектов на неправильных страницах/сохранении их и извлечении их на нужную им страницу? (IE я должен только сохранить данные мне нужно создавать объекты на самой странице? (Который, кажется, как много накладных расходов для той же самой вещи (?)).

Заранее спасибо.

EDIT

У меня есть страница с параметрами, которая создает объект, который позволяет называть его MyApi. Я создаю новый MyApi и сохраняю его в chrome.storage.local. Когда пользователь имеет какой-то текст и нажимает на контекстное меню, я открываю новый (selectedText.html), который отображает выделенный текст и некоторые вызовы API, которые являются в основном аякс-запросами. В тот момент, когда я получаю объект из хранилища в selectedText.html и делаю любой запрос с помощью My Api Я не вижу никаких журналов на вкладке сети для запросов ajax, ни в каких консольных журналах. Но, открыв страницу опций, я вижу все там.

EDIT2

save : function() 
{ 
    var obj = {'api':this.data}; 
    chrome.storage.local.set(obj,function() { if(chrome.runtime.lastError) console.warn(chrome.runtime.lastError); }); 
} 

Это в фоновом скрипте.

+0

Не совсем понятно, что вы пытаетесь достичь, но очевидно, что контекст страницы параметров не подходит для этой цели. Вы изучали ** chrome.storage **? – gkalpak

+0

Я создаю объекты и сохраняю их в chrome.storage. но когда любые методы, называемые им, не имеют консоли для входа в журнал. – John

+0

Всегда есть консоль (конечно, вы должны ее открыть). То, что вы имеете в виду, неясно. Попробуйте опубликовать код и более подробное объяснение того, что происходит на каждом шаге. – gkalpak

ответ

0

Вы можете добиться того, что вы хотите таким образом:

  1. Определить свой объект/функцию/независимо в фоновом режиме страницы.
  2. chrome.runtime.getBackgroundPage() чтобы удержать фоновые страницы window объект.
  3. Выполните желаемый метод, передав в качестве аргумента объект локального контекста. (Конечно, вы должны изменить функцию, чтобы принимать и использовать такой аргумент.)

Пример:

В background.js:

function myFunc(winObj, msg) { 
    winObj.console.log(msg); 
} 

В otherPage. ЯШ:

chrome.runtime.getBackgroundPage(function(bgPage) { 
    bgPage.myFunc(window, "This will be logged in 'otherPage.html' !"); 
}); 

Это не сл eanest, но это может сработать ...

+0

Это не будет работайте, если на фоновой странице сделан ajax-вызов. Он войдет на вкладку в сети для фоновых страниц, которые передают мои события ajaxSend и ajaxComplete на странице, которую я (но запускаются для справочных страниц). – John

+0

Трюк заключается не в том, чтобы вызвать его в контексте фоновой страницы. Поскольку я хочу использовать jQuery '.ajax()', вы можете передать объект jQuery' вашего контента (и любой другой необходимый аргумент) и просто иметь функцию «инструмент» для вас. – gkalpak

Смежные вопросы