Javascript Chrome extension抛出“a”;无法将未定义或null转换为object“;错误
我正在构建一个扩展,该扩展将存储来自chrome选项卡的令牌(一旦您完成加载该特定选项卡,它将获取该令牌)。 当运行扩展时(通过按下按钮运行),它应该“获取”令牌并使用它创建ajax调用 这是对其作用的简单解释;代码如下: background.js:Javascript Chrome extension抛出“a”;无法将未定义或null转换为object“;错误,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在构建一个扩展,该扩展将存储来自chrome选项卡的令牌(一旦您完成加载该特定选项卡,它将获取该令牌)。 当运行扩展时(通过按下按钮运行),它应该“获取”令牌并使用它创建ajax调用 这是对其作用的简单解释;代码如下: background.js: chrome.runtime.onInstalled.addListener(function() { chrome.declarativeContent.onPageChanged.removeRules(undefined, func
chrome.runtime.onInstalled.addListener(function() {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { urlContains: 'h' }
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
});
舱单:
{
"name": "Page action by URL",
"version": "1.0",
"description": "Shows a page action for urls which have the letter 'g' in them.",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"page_action": {
"default_icon": "images/icon32.png",
"default_title": "linkedin URL!",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js" : ["getToken.js"],
"run_at":"document_end"
}
],
"permissions": [
"storage",
"activeTab",
"tabs",
"<all_urls>",
"cookies",
"declarativeContent",
"http://*/*",
"https://*/*"
],
"icons" : {
"48" : "images/icon32.png",
"128" : "images/icon32.png"
},
"manifest_version": 2
}
和popup.js(按钮激活功能):
我在devTools中得到以下错误,单击按钮后会发出undefined警报,我还使用StorageAreaExtension检查了扩展的存储区域,它显示扩展具有我试图获取的值
当我调试它时,在storage.local.get函数中,它抛出以下错误:
extension.binding的延迟要求未设置绑定字段
extensions::lastError:82:未捕获类型错误:无法转换未定义的
或null到对象{TypeError:无法将未定义或null转换为
反对
你知道为什么吗?我在过去几天里查阅了google,但没有找到任何可靠的修复方法。chrome.*可以接受函数回调的API方法是异步的,因此实际工作是在当前代码上下文完成时执行的,因此
get
在set
实际设置之前开始查找值(存储访问在内部有几个异步步骤)。此外,您已经声明了在所有页面上注入的内容脚本,而不管PageStateMatcher如何。我遇到了此异常,尽管令牌甚至没有被清除,并且自上次运行以来一直存在。因此,我发现您的解释有点欠缺,它唯一没有引发异常的时间是在我清除以前的数据之后。。但是..由于一些奇怪的原因,它的行为不一致。嗯,我的评论也适用于弹出窗口:您试图显示回调之外尚未检索到的值。事实就是这样。异步JavaScript就是这样工作的。请参阅chrome。*可能接受函数回调的API方法是异步的,因此实际工作是异步的当当前代码上下文完成时,因此get
在set
实际设置值之前开始查找该值(存储访问在内部有几个异步步骤)。此外,您已经声明了在所有页面上注入的内容脚本,而不管PageStateMatcher如何。我遇到了此异常,尽管令牌甚至没有被清除,并且自上次运行以来一直存在。因此,我发现您的解释有点欠缺,它唯一没有引发异常的时间是在我清除以前的数据之后。。但是..由于一些奇怪的原因,它的行为不一致。嗯,我的评论也适用于弹出窗口:您试图显示回调之外尚未检索到的值。事实就是这样。异步JavaScript就是这样工作的。请参阅
if(document.getElementById('HrmsTkn')){
chrome.storage.local.set({ 'HrmsTkn': document.getElementById('HrmsTkn').value});
chrome.storage.local.get('HrmsTkn', function(result){
alert('Got it' + result.HrmsTkn);
});
}
$(function () {
$('#btnGetHtml').click(function () {
var token;
chrome.storage.local.get('HrmsTkn', function (items) {
if(items){
token = items.HrmsTkn;
}
});
try {
alert(token);
}
catch(e) {
}
});
});