2015-09-16 2 views
0

Я занят созданием хромовых расширений, которым нужно проверить список json-формата для URL-адресов и сравнить каждый раз, когда посещается новая вкладка или adres. Когда есть соответствие, ему нужно делать что-то ... Но сейчас я не могу использовать переменные изнутри функции, я думал, что это что-то с глобальными и локальными переменными, но я не могу это понять. Переменная i не может достигать u = request.dom; Когда я проверяю ее за пределами addListener в console.log, я получаю undefined.Chrome extensions variable acces

мой код:

Background.js (JQuery-1.11.3.js, amplify.js загружен):

loadedwebshops = amplify.store('webshops'); 
(function loadShops() { 
    if (typeof loadedwebshops != 'undefined') { 
    } else { 
     // load from server 
     $.ajax({ 
      url: '../shoplist.json', 
      dataType: 'json', 
      data: {} 
     }).done(function(data, textStatus, jqXHR) { 
      // update the cache 
      amplify.store('webshops', data, { 
       expires: 60000 
      }); 
      loadedwebshops = amplify.store('webshops'); 
      //populate.Shops(data); 
     }).fail(function(jqXHR, exception) { 
     }).always(function() { 
     }); 
     // alert("server"); 
     if (typeof loadedwebshops === 'undefined') { 
      location.reload(); 
     } 
    } 
    setInterval(loadShops, 60000); 
} 
)(); 
chrome.extension.onMessage.addListener(function(request) { 
    u = request.dom; 
    requestedUrl(u); 
}); 
$(document).ready(function() { 
    var webshops = loadedwebshops["webshops"]; 
    console.log(webshops); 
    function requestedUrl(u){ 
     console.log(u); 
    } 
}); 

Main.js:

var d = document.domain; 
chrome.extension.sendMessage({ 
    dom: d 
}); 

Манифест:

{ 
    "background": { 
     "page": "background.html" 
    }, 
    "browser_action": { 
     "default_icon": "icons/actions/1.png", 
     "default_title": "toolbar" 
    }, 
    "content_scripts": [{ 
     "all_frames": true, 
     "js": ["lib/jquery-1.11.3.js", "lib/amplify.js", "lib/main.js"], 
     "matches": ["http://*/*", "https://*/*"] 
    }], 
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", 
    "description": "extension", 
    "icons": { 
     "128": "icons/icon128.png", 
     "16": "icons/icon16.png", 
     "48": "icons/icon48.png" 
    }, 
    "manifest_version": 2, 
    "name": "toolbar", 
    "version": "1.1", 
    "permissions": ["http://*/*", "https://*/*", "tabs", "cookies", 
     "notifications", "contextMenus", "webNavigation", "webRequest", 
     "webRequestBlocking", "unlimitedStorage", "storage" 
    ] 
} 
+0

Какие переменные вы возникают проблемы с доступом? Это ваша проблема: http://stackoverflow.com/q/23667086/2336725 – Teepeemm

+0

Спасибо за комментарии, это мой первый вопрос .. Я отрегулирую его сразу. У меня проблема с переменной 'u'. Я могу предупредить его внутри addListener, но в 'console.log' он говорит undefined. 'u = request.dom;' u заполняется URL-адресом вкладки посещения. –

+0

Я немного изменил код, теперь он должен начать функцию, которая передает значение. Еще ничего; requestUrl не определен. –

ответ

0

решаемые это ... Проблема была именно в другой области я $(document).ready(function() {});

Новый код:

loadedwebshops = amplify.store('webshops'); 
(function loadShops() { 
    if (typeof loadedwebshops != 'undefined') { 
    } else { 
     // load from server 
     $.ajax({ 
      url: '../shoplist.json', 
      dataType: 'json', 
      data: {} 
     }).done(function(data, textStatus, jqXHR) { 
      // update the cache 
      amplify.store('webshops', data, { 
       expires: 60000 
      }); 
      loadedwebshops = amplify.store('webshops'); 
      //populate.Shops(data); 
     }).fail(function(jqXHR, exception) { 
     }).always(function() { 
     }); 
     // alert("server"); 
     if (typeof loadedwebshops === 'undefined') { 
      location.reload(); 
     } 
    } 
    setInterval(loadShops, 60000); 
} 
)(); 
chrome.extension.onMessage.addListener(function(request) { 
    u = request.dom; 
    requestedUrl(u); 
}); 

var webshops = loadedwebshops["webshops"]; 
console.log(webshops); 
function requestedUrl(u){ 
    console.log(u); 
} 
Смежные вопросы