Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 &引用;无法读取未定义的属性";在内容脚本中使用chrome.tabs或其他chromeapi时_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript &引用;无法读取未定义的属性";在内容脚本中使用chrome.tabs或其他chromeapi时

Javascript &引用;无法读取未定义的属性";在内容脚本中使用chrome.tabs或其他chromeapi时,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,chrome.tabs返回未定义,尽管我在权限块中设置了选项卡 "permissions": [ "tabs", "http://*/*", "https://*/*" ], "content_scripts": [ { "matches": [ "http://*/*", "https://*/*" ], "js": [ "js/myScrip

chrome.tabs
返回未定义,尽管我在权限块中设置了选项卡

"permissions": [
    "tabs",
    "http://*/*",
    "https://*/*"
],
"content_scripts": [
    {
        "matches": [
            "http://*/*",
            "https://*/*"
        ],
        "js": [
            "js/myScript.js"
        ],
        "all_frames": true
    }
],
但是在myScript.js中,以下返回未定义

chrome.tabs   

由于内容脚本有其自身的局限性


chrome.tabs
仅在后台脚本和弹出脚本中可用

如果您想使用
chrome.tabs
,请将消息从内容脚本传递到背景脚本,并使用
chrome.tabs

也检查此答案 这个对我有用

chrome.tabs.getSelected(null, function(tab){
    console.log(tab);
});
只能有限地访问Chrome API。此访问不包括您尝试使用的API(例如,
chrome.tabs
)。如果需要使用该API,则必须在1中使用

如Chrome中所列,内容脚本可用的API有[我已将不推荐的方法置于删除线格式]:

  • (,,,)
  • (,,,,,,)
列出的几个API已被弃用,并且已经使用了一段时间。已弃用的已移动到不同的位置(也在上面列出):

  • extension.onRequest
  • extension.sendRequest
虽然没有正式弃用,
extension.lastError
也可以作为。在这一点上,通常指该位置:

  • extension.lastError
将扩展划分为后台脚本和内容脚本 您需要根据每种脚本可用的功能,将代码分为需要在后台脚本中的内容和需要在内容脚本中的内容。内容脚本可以访问它们被注入的网页的DOM,但对扩展API的访问有限。后台脚本可以完全访问扩展API,但不能访问网页内容。您应该阅读,以及从那里链接的页面,以了解在哪种类型的脚本中应该包含哪些功能

通常需要在内容脚本和后台脚本之间进行通信。为此,您可以使用。这允许您在两个脚本之间通信信息,以完成仅使用一种脚本类型无法完成的任务。 例如,在您的内容脚本中,您可能需要只能从其他Chrome API之一获得的信息,或者您需要通过其他Chrome扩展API之一最合适(或只能)完成的事情。在这些情况下,您将需要在后台脚本中使用,告诉它需要做什么,同时提供足够的信息让它能够这样做。然后,后台脚本可以将所需信息(如果有)返回到内容脚本。或者,有时处理主要在后台脚本中完成。背景脚本可以注入内容脚本,或者只注入已经注入的脚本,以从页面获取信息,或者对网页进行更改


  • 背景脚本是指背景上下文中的任何脚本。除了实际页面外,还包括弹出窗口和选项页面等。但是,您可以确保始终可以从内容脚本接收消息的唯一页面是manifest.json中定义的实际页面。由于用户与浏览器的交互,其他页面有时可能可用,但这些页面并不一致
  • 此答案已从a移动,然后进行了修改。

    显示

    被选中 chrome.tabs.getSelected(整数windowId,函数 回调)
    自Chrome 33以来已弃用。请使用tabs.query{active:true}。
    获取在指定窗口中选择的选项卡

    也许,您应该像这样使用popup.js中的chrome.tabs.query

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        console.log(tabs[0].url);
    });
    
    重新加载扩展插件,并在扩展插件的inspect元素中检查结果

    表明
    选项卡显示的URL。此属性仅在扩展的清单中包含“tabs”权限时才存在。(仅用于提醒某人忘记了。我刚测试时忘记了它。)

    chrome。tabs
    仅适用于扩展进程中运行的代码,例如后台、选项或弹出页面。内容脚本无法访问
    chrome.tabs
    对象。我在后台页面中有chrome.tabs,这是一个未定义的问题!getSelected()chrome.tabs方法在chrome 33之后就被弃用了。令人困惑的是,的API文档中包含了关于使用
    chrome.tabs
    API的说明……我投票反对这个方法,因为我从google官方API文档中得到了完全相反的文档。>chrome.tabs.getCurrent>获取进行此脚本调用的选项卡。如果从非选项卡上下文(例如:背景页或弹出视图)调用,则可能未定义。请检查:chrome.tabs总是未定义的,因为这根本不是真的<代码>chrome.tabs
    在弹出脚本中未定义。只需添加-在
    chrome.tabs
    后台
    页面中调用之前,我已尝试使用
    调试器
    ,此时我得到
    chrome.tabs
    未定义。当我不间断地运行该代码时,它似乎工作正常(同样,仅在
    后台
    页面中)。不,问题是tabs API在注入的内容脚本中完全不可用。getCurrent chrome.tabs.getCurrent(函数回调)获取进行此脚本调用的选项卡。如果从非选项卡上下文(例如,背景页或弹出视图)调用,则可能未定义@GregDomjan
    chrome.tabs
    仅在后台上下文中可用。内容脚本不在后台