Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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 内容脚本未在新窗口中执行_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 内容脚本未在新窗口中执行

Javascript 内容脚本未在新窗口中执行,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在尝试创建一个Chrome扩展,当单击它时,会打开一个新的incognito窗口并对其执行一些DOM操作。以下是我正在使用的文件: manifest.json { "manifest_version": 2, "name": "SampleExtension", "description": "", "version": "1.0", "incognito": "spanning", "browser_action": { "default_icon": "

我正在尝试创建一个Chrome扩展,当单击它时,会打开一个新的incognito窗口并对其执行一些DOM操作。以下是我正在使用的文件:

manifest.json

{
 "manifest_version": 2,

  "name": "SampleExtension",
  "description": "",
  "version": "1.0",
  "incognito": "spanning",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },

  "content_scripts": [
    {
      "matches": ["http://www.google.com"],
      "js": ["myscript.js"]
    }
  ],

  "permissions": [
    "tabs",
    "activeTab",
    "http://www.google.com"
  ]
}
popup.js

chrome.windows.create({
    "url": "http://www.google.com", 
    "focused": true, 
    "incognito": true
});

chrome.tabs.executeScript(null, {
    "file": "myscript.js", 
    "run_at": "document_end", 
    "all_frames": true
});
document.querySelector('a[target]').click();
myscript.js

chrome.windows.create({
    "url": "http://www.google.com", 
    "focused": true, 
    "incognito": true
});

chrome.tabs.executeScript(null, {
    "file": "myscript.js", 
    "run_at": "document_end", 
    "all_frames": true
});
document.querySelector('a[target]').click();
扩展将打开新窗口,但我的内容脚本似乎没有执行。有什么想法吗


编辑:在清单中添加了
“匿名”:“跨越”
。但是仍然不起作用。

首先,我知道您已启用以匿名模式运行。扩展在默认情况下是禁用的,因此,它不会在其他情况下运行

其次,您的匹配模式需要以斜杠结尾:

"matches": ["http://www.google.com/"],
第三,谷歌会将您重定向到它的https版本,因此我会改进如下:

"matches": ["*://www.google.com/"],
不过,这对我来说并不管用,因为我被重定向到了本地的谷歌域名。因此,我必须做更多的补充:

"matches": [
    "*://www.google.com/*",
    "*://www.google.com.sg/*"
  ],
此外,我还添加了最后一个通配符,因为Google添加了一些我必须匹配的?urlParams。这让它起作用了。请注意,我尝试了其他页面,如
“*://www.stackoverflow.com/*”,
,这比谷歌更容易:)

如果你的谷歌页面只是一个测试,我建议使用一些重定向较少的页面进行测试

最后一点注意:我认为不可能对域使用通配符(我尝试过)。但是,您可以请求所有主域,或者请求所有_页面,然后仅在my_script.js上为Google添加逻辑,以决定是否执行该操作。(然而,这最后一件并不理想)


编辑帖子评论:

您的函数似乎失败了,因为元素尚未加载。解决这个问题的一个简单方法是执行一个间隔,检查元素是否在页面上。当它找到它时,单击它并删除间隔

// Function which clicks element if existing and clears interval after doing it.
var clickLink = function() {
  if (document.querySelectorAll('a[target]').length > 0) {
    clearInterval(waitAndClick); // stop interval
    document.querySelector('a[target]').click(); // click element.
  }
}

// Run click function every second, until it clicks it.
var waitAndClick = setInterval(clickLink, 1000);

您必须在
chrome://extensions
谢谢。我试过了。似乎仍然没有执行。请尝试在清单中添加密钥:已将
“incognito”:“split”
添加到清单中。还是不起作用,把它擦掉。使其成为“隐姓埋名”:“跨越”。不过没什么不同。谢谢。不过,我打开的实际URL不是谷歌P我确实在匹配模式的末尾添加了斜杠,但是它仍然不起作用。而且这个页面肯定不会被重定向到其他地方。这对我很有效。你正在打开哪一页?你的比赛模式是什么?您是否启用了匿名模式下的分机?我还建议你发出警报(“你好”);为了确保它不会开火:)好极了。内容脚本似乎正在执行。但是DOM元素上的
click
似乎不起作用-我得到了一个
uncaughttypeerror:cannotreadproperty'click'的null
错误。这可能是因为脚本是在DOM完全加载之前执行的。但是
chrome.tabs.executeScript()
“run\u at”:“document\u end”
键不应该精确地处理这个问题吗?加载页面后,当我在控制台上手动尝试时,
单击
会起作用。是的,如果在命令行上运行该选择器,则假定存在一个元素,这意味着未加载该元素。一种方法是执行setInterval()<代码>//函数,该函数单击元素(如果存在)并在执行后清除间隔。var clickLink=function(){if(document.queryselectoral('a[target]')。长度>0){document.querySelector('a[target]')。click();//click元素。clearInterval(waitAndClick);}}//每秒运行一次click函数,直到它单击为止。var waitAndClick=setInterval(clickLink,1000)是的,我做了类似的hacky
setTimeout
以确保页面完全加载。非常感谢你的帮助。