长期读者,第一次提问。在尝试解决这个问题时,我遇到了很多类似的问题,但是对于我自己的一生,我只是无法启动并运行它。我并没有做太多的Java脚本,所以当我阅读许多文档链接时,我不能总是把头放在这上面。
我公司的供应商之一在我公司的自定义域上有一个"Sign in with Google"按钮。我们使用Google身份,因此我们总是有一个活动的Google会话,但是供应商说必须单击该按钮。我认为创建一个Chrome扩展程序很容易,只要我们进入供应商页面,该扩展程序就会单击该按钮。
在开发工具的控制台中,我可以运行以下行,这将激活按钮并启动身份验证流程,因此这部分是手动工作的:
document.getElementById('googleSignInButton').click();
我尝试了几种不同的解决方案,所以我的'manifest.json','background.js'和'ClickButton.js'有点跷,抱歉。
manifest.json
{
"name": "ClickButton",
"version": "1.0",
"description": "Clicks Sign in with Google Button",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": ["declarativeContent", "webNavigation", "tabs", "https://www.vendor.com/"],
"browser_action":{
"default_title": "Title"
},
"content_scripts": [
{
"matches": ["http://www.vendor.com/*"],
"all_frames": true,
"run_at": "document_end",
"js": ["ClickButton.js"]
}
],
"manifest_version": 2
}
background.js
//When I run this code in background.js it works as it requires me to click the plugin button
//Clicking the plugin button will run ClickButton.js and it will activate the "googleSignInButton"
/*
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript(tab.ib, {
file: 'ClickButton.js'
});
});
*/
//This is the chunk of code pulled from Google's Getting Started Tutorial https://developer.chrome.com/extensions/getstarted
//This will load ClickButton.js when I am just running alert. It also loads the ClickButton.js when I am actually trying to click the "googleSignInButton"
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostEquals: 'www.vendor.com'},
})
],
actions: [new chrome.declarativeContent.RequestContentScript({js: ["ClickButton.js"]})]
}]);
});
ClickButton.js
document.getElementById('googleSignInButton').click();
//When I am just running an alert, this pops up when I navigate to my vendor's page, so JS should be getting injected
/*alert ("Test");*/
我尝试了许多不同类型的故障排除。从background.js和ClickButton.js可以看到,我已经注释掉了一些测试。当我使用chrome.browserAction.onClicked时,我可以手动启动javascript以单击按钮,但这正是我要避免的事情。
使用chrome.declarativeContent.PageStateMatcher(即不手动单击扩展名)时在扩展名中出现的错误是:
Uncaught TypeError: Cannot read property 'click' of null
据我所知,这意味着扩展尝试运行时可能未加载DOM。这就是为什么我同时尝试了document_idle(按Content Scripts documentation)和document_end的原因,以为DOM尚未准备好。我也尝试过setTimeout只是为了等待它,但是没有以上错误它仍然无法运行。
我还引用了Dan Harper的bare minimum Chrome extension.,当我单击按钮时可以运行他的Javascript:
(function() {
// just place a div at top right
var div = document.createElement('div');
div.style.position = 'fixed';
div.style.top = 0;
div.style.right = 0;
div.textContent = 'Injected!';
document.body.appendChild(div);
alert('inserted self... giggity');
})();
但是当我尝试使其在页面上运行时,我得到了错误:
Uncaught TypeError: Cannot read property 'appendChild' of null
这让我认为在这种情况下,document.body.appendChild(div)可能存在问题,并且可能是扩展尝试在加载所有内容之前运行。
这可能是一个权限问题,脚本无法访问页面上的“ googleSignInButton”。据我所知,我试图在manifest.json中设置对供应商网站的权限。
很抱歉,我的提问时间太长!但是,我确实一直在尝试许多不同的方法来使它起作用,并且我已经做了很多Google搜索。我只是想不通。希望有人可以提供帮助。
非常感谢您!