Chrome 扩展程序空类型错误
Chrome Extension null TypeError
所以我有一个chrome扩展程序,它通过xml文档检查程序的更新。但是,当我打开一个新选项卡时,我收到此错误:
Error in event handler for 'tabs.onActivated': Cannot call method 'getElementsByTagName' of null TypeError: Cannot call method 'getElementsByTagName' of null
at isUpdateAvailable (chrome-extension://bdhjocmpiogdmlfpbpppiffcjbonbocg/background.js:16:17)
at chrome-extension://bdhjocmpiogdmlfpbpppiffcjbonbocg/background.js:84:5
at chrome.Event.dispatch (event_bindings:237:41)
at Object.chromeHidden.Event.dispatchJSON (event_bindings:151:5
法典:
function loadXMLDoc(dname) {
if (window.XMLHttpRequest) {
xhttp=new XMLHttpRequest();
} else {
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
xhttp.send();
return xhttp;
}
function isUpdateAvailable(type, build) {
var buildNumber = localStorage["version" + build + type];
var xml = loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + build + "/view/latest-" + type + "/");
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("title")[0];
var y = x.childNodes[0];
var txt = y.nodeValue;
if(txt == buildNumber) {
return true;
}
xml.close();
return false;
}
function notify(type, build) {
window.webkitNotifications.createNotification('icon.png', getTitle(type, build), getDescription(type, build));
}
function getTitle(type, build) {
var title;
var xml = loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + type + "/view/latest-" + build + "/");
var xmlDoc=xml.responseXML;
var name=xmlDoc.getElementsByTagName("name")[0];
var version=xmlDoc.getElementsByTagName("version")[0];
title+=name;
title+=" version ";
title+=version;
title+=" is out!";
xml.close();
return title;
}
function getDescription(type, build) {
var desc;
var xml = loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + type + "/view/latest-" + build + "/");
var xmlDoc=xml.responseXML;
var name=xmlDoc.getElementsByTagName("name")[0];
desc+="There is a new update for ";
desc+=name;
desc+=". You can download it here: ";
var downloadLink;
get_short_url(long_url, function(short_url) {downloadLink=short_url;});
desc+=downloadLink;
xml.close();
return desc;
}
function get_short_url(long_url, func) {
var login = "kezz101";
var api_key = "R_d68d87d13b42412a56be9bd9711c4dc4";
$.getJSON("http://api.bitly.com/v3/shorten?callback=?",
{
"format": "json",
"apiKey": api_key,
"login": login,
"longUrl": long_url
},
function(response) {
func(response.data.url);
}
);
}
chrome.tabs.onActivated.addListener(function() {
var type = localStorage["type"];
var build = localStorage["build"];
if(!type) {
type = "rb";
}
if(!build) {
build = "craftbukkit";
}
if(isUpdateAvailable(type, build)) {
notify(type, build);
var xml = loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + type + "/view/latest-" + build + "/");
var xmlDoc=xml.responseXML;
localStorage["version" + build + type] = xmlDoc.getElementsByTagName("build_number")[0];
xml.close();
}
});
您正在使用同步 Ajax,该同步 Ajax 已针对扩展和应用禁用。 您应该改用异步 Ajax 并将回调传递到 loadXMLDoc
中:
function loadXMLDoc(dname, callback) {
if (window.XMLHttpRequest) {
xhttp=new XMLHttpRequest();
} else {
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname);
xhttp.onload = function() {
callback(xhttp);
}
xhttp.send();
}
function isUpdateAvailable(type, build, callback) {
var buildNumber = localStorage["version" + build + type];
loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + build + "/view/latest-" + type + "/", function(xml) {
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("title")[0];
var y = x.childNodes[0];
var txt = y.nodeValue;
if(txt == buildNumber) {
callback(true);
} else {
xml.close();
callback(false);
}
});
}
...
chrome.tabs.onActivated.addListener(function() {
var type = localStorage["type"];
var build = localStorage["build"];
if(!type) {
type = "rb";
}
if(!build) {
build = "craftbukkit";
}
isUpdateAvailable(type, build, function(isAvail) {
if(isAvail) {
notify(type, build);
var xml = loadXMLDoc("http://dl.bukkit.org/api/1.0/downloads/projects/" + type + "/view/latest-" + build + "/", function(xml) {
var xmlDoc=xml.responseXML;
localStorage["version" + build + type] = xmlDoc.getElementsByTagName("build_number")[0];
xml.close();
});
}
});
});
相关文章:
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 如何解决这种情况下的非法调用类型错误
- 未捕获的类型错误:$(..).dataTable不是函数
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 类型错误:url未定义extjs 4正在填充组合框
- 未捕获的类型错误:无法读取属性'中止'的未定义
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- 未捕获的类型错误:undefined不是函数$
- 输入类型文件的未捕获类型错误
- 未捕获的类型错误:无法设置属性'背景'的未定义
- "未捕获类型错误/丢弃意外“;因为一句台词而出现?(HTML w/<脚本>)
- Javascript未捕获类型错误:无法读取属性'0'的未定义