Javascript 我可以从控制台访问对象,但可以';来自页面java脚本的t
我正在写chrome扩展,当我写控制台时 “g_ActiveInventory”我得到的结果是: 但当我尝试在扩展中使用以下代码获取对象时:Javascript 我可以从控制台访问对象,但可以';来自页面java脚本的t,javascript,google-chrome-extension,undefined,Javascript,Google Chrome Extension,Undefined,我正在写chrome扩展,当我写控制台时 “g_ActiveInventory”我得到的结果是: 但当我尝试在扩展中使用以下代码获取对象时: window.setTimeout(test2, 5000); function test2() { var size = Object.keys(g_ActiveInventory.rgInventory).size(); console.log(size); } 我收到错误信息: 未捕获引用错误:未定义g_ActiveInv
window.setTimeout(test2, 5000);
function test2()
{
var size = Object.keys(g_ActiveInventory.rgInventory).size();
console.log(size);
}
我收到错误信息:
未捕获引用错误:未定义g_ActiveInventory
我怎样才能修好它
manifest.json:
{
"name": "How Many Items",
"version": "1.0",
"manifest_version": 2,
"description": "",
"icons": {
"16": "icons/love.png"
},
"background": {
"scripts": [
"node_modules/jquery/dist/jquery.min.js"
],
"persistent": true
},
"browser_action": {
"default_icon": "icons/love.png",
"default_title": "How Many Items"
},
"content_scripts": [ {
"js": [ "js/jquery/jquery-1.10.2.min.js", "js/code.js" ],
"matches": [ "*://steamcommunity.com/tradeoffer/*" ],
"run_at": "document_end"
} ]
}
在调用test2之前,您应该定义g_ActiveInventory 检查此代码:
function function_name() {
console.log(size);
}
function_name();//it gives undefined because teh variable defined atfer calling
var size="12";
这是正确的方法
function function_name() {
console.log(size);
}
var size="12";
function_name();//it gives 12 because the variable defined before calling
我希望这有帮助该对象可以在5秒后加载,或者在您尝试使用它时还不可用 您可以在使用变量之前对其进行测试,如果尚未加载,请等待并重试,如以下示例所示:
setTimeout(test2,5000);
function test2()
{
if (!g_ActiveInventory){
console.log("Not loaded yet...");
setTimeout(test2,1000);
return;
}
var size = Object.keys(g_ActiveInventory.rgInventory).size();
console.log(size);
}
如文档所述(请参阅和),您的内容脚本无法直接访问网页的窗口对象或变量。但是,您可以尝试以下小技巧:在页面的DOM中创建一个新的
脚本标记,其中包含您想要的代码。例如:
setTimeout(test2,5000);
function test2() {
var myScript = document.createElement("script");
myScript.innerHTML = `
var size = Object.keys(g_ActiveInventory.rgInventory).size();
console.log(size)`;
document.body.appendChild(myScript);
}
是否在定义g_ActiveInventory
之前调用了test2
?请检查定义这些符号的脚本顺序。我设置了超时以确保所有数据都已加载。首先加载页面,然后使用g_ActiveInventory加载此数据。因此,我将超时设置为等待加载。如果变量g\u ActiveInventory
是由网页创建的,则您的内容脚本无法访问它。请参阅:内容脚本无法使用网页或其他内容脚本定义的变量或函数。是否有任何方法可以访问我的chrome扩展?请参阅我正在尝试从网页解析此数据。因此,当页面加载并获取g_ActiveInventory时,我的扩展将等待5秒钟。若我按下刷新键并在1秒后写入控制台“g_ActiveInventory”,我将收到数据,但我在JS中收到错误。正如你们所看到的,我在控制台中得到数据,然后从扩展中收到错误:好的,我明白了,这是一个不同的问题,正如你们所看到的,我在控制台中得到数据,然后我收到来自扩展名的错误:I.imgur.com/NSn4qC7.png