Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以从控制台访问对象,但可以';来自页面java脚本的t_Javascript_Google Chrome Extension_Undefined - Fatal编程技术网

Javascript 我可以从控制台访问对象,但可以';来自页面java脚本的t

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

我正在写chrome扩展,当我写控制台时 “g_ActiveInventory”我得到的结果是:

但当我尝试在扩展中使用以下代码获取对象时:

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