У меня есть два файлаобъекты javascript не могут видеть друг друга? :: Google Chrome расширение
одна называется stats.js
один называется storage.html
в stats.js в
содержитvar stats = {
myFunc : function() {
//do something
}
}
в storage.html У меня есть
<html>
<head>
<script src="stats.js"></script>
<script>
$(document).ready(function() {
stats.myFunc();
});
</script>
</head>
</html>
Но я получаю
Uncaught TypeError: Cannot call method 'myFunc' of undefined
Update
Ok, так что было очень упрощенный пример.
Основы ней,
Это расширение Chrome Google, Таким образом, вы будете видеть некоторый код специфичны для этого.
Вот касается буквальные страницы:
Popup.html
<html>
<head>
<title>Extension</title>
<script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script src="js/popup.js"></script>
<script src="js/statsapi.js"></script>
<link type="text/css" rel="stylesheet" href="css/popup.css" />
</head>
<body>
<div id="content">
</div>
</body>
</html>
popup.js
$(document).ready(function() {
if(background.storage.get('firstRun') == null)
background.initialize();
if(background.storage.get('metaExpire') >= Date.parse(Date()))
background.updateMeta();
$('#content').append(read_object(stats.getMetaData()));
});
function read_object(object){
var $obj = $('<div />');
for(var o in object) {
$obj.append(o+' : ');
if(typeof(object[o]) == 'object' && object[o] != null)
$obj.append(read_object(object[o]));
else
$obj.append(object[o]+'<br />');
}
return $obj;
}
manifest.json
{
"name": "Halo Reach: Stats",
"description": "This extension allows you to keep track of your own, and your friends Halo Reach Stats.",
"version": "1.0.0.1",
"permissions": [
"http://www.bungie.net/"
],
"icons": {
"128": "images/logo/logo128.jpg",
"64": "images/logo/logo64.jpg",
"32": "images/logo/logo32.jpg",
"16": "images/logo/logo16.jpg"
},
"browser_action": {
"default_title": "Open Stats",
"default_icon": "images/logo/logo32.jpg",
"popup": "popup.html"
},
"background_page": "background.html"
}
statsapi.js
var background = chrome.extension.getBackgroundPage();
var apikey = background.storage.get('apikey');
var gamertage = background.storage.get('gamertag');
var page = '0';
var stats = {
getMetaData : function() {
var url = 'http://www.bungie.net/api/reach/reachapijson.svc/game/metadata/'+apikey;
console.log(url);
$.ajax({
url: url,
success: function(data) {
return data;
}
});
},
meta : {
read : function(param) {
var meta = background.storage.get('metaData');
}
}
};
Background.html
<html>
<head>
<script src="js/statsapi.js"></script>
<script>
var storage = {
set : function (key, value) {
window.localStorage.removeItem(key);
window.localStorage.setItem(key, value);
},
get : function (key) {
return window.localStorage.getItem(key);
},
clear : function() {
window.localStorage.clear();
}
};
function updateMeta() {
var meta = stats.getMetaData();
if(meta['status'] == 0){
storage.set('metaData', JSON.stringify(meta));
storage.set('metaExpire', Date.parse(Date())+900000);
}
}
function initialize() {
storage.set('apikey', '***');
storage.set('gamertag', 'The Hailwood');
updateMeta();
}
</script>
</head>
</html>
Когда расширение вызывается он вызывает popup.html
и документ готов Javascript вызывается ,
Проверка на первом запуске не удается,
так заезжает background.html
initialize()
Но это, где происходит ошибка.
фактическая ошибка
Uncaught TypeError: Cannot call method 'getMetaData' of undefined.
Так почему он не может видеть класс статистику?
его не сценарий включает проблему, как если бы путь был неправильным для statsapi.JS я
Uncaught ReferenceError: stats is not defined.
Проблема, кажется, с var stats {}
, как будто под ним у меня есть функция под названием тест() я могу назвать это штраф:/
Хм,
находится там потому что это внешняя таблица стилей?
Это * все * это в 'stats.js'? Или это обернуто чем-то другим? –
Можете ли вы предоставить структуру 'manifest.json', пожалуйста. – RobertPitt
Я добавил его в список. – Hailwood