我正在写一个谷歌浏览器扩展来自动化一些常见的任务。我想要的功能如下:
1.创建新选项卡并导航到我的网络邮件
1.请输入用户名和密码
1.点击“提交”按钮
1.等待直到webmail页面出现,然后选择“roundcube”客户端。
我已经完成了步骤1、2和3,并且它们都能正常工作。在提交凭据之后,我遇到了很多麻烦,因为我无法侦听URL更改,因此选择roundcube客户端的函数无法运行
我知道我可以在客户端选择页面出现时通过添加到清单来运行脚本,但我想使用“chrome.tabs.executeScript”来代替,这样只有当我从chrome扩展运行脚本时才选择roundcube,而不是当我手动进入客户端选择页面时。
这是我的清单。
{
"manifest_version": 2,
"name" : "Chrome Autobot",
"description": "This extension will run various automation scripts for google chrome",
"version" : "1.0",
"browser_action" : {
"default_icon" : "icon.png",
"default_popup": "index.html"
},
"permissions": [
"activeTab",
"webNavigation",
"tabs",
"http://*/*",
"https://*/*"
]
}
下面是我的chrome脚本:
jQuery(function($) {
"Use Strict";
var openWebmail = function() {
chrome.tabs.create({
url: 'http://mywebmaillogin.com:2095/'
}, function() {
chrome.tabs.executeScript(null, {file: "scripts/openEmail.js"});
});
chrome.tabs.onUpdated.addListener(function(){
chrome.tabs.executeScript(null, {file: "scripts/openEmail.js"});
alert('i work');
});
};
var init = $('.script-init');
init.on('click', function() {
openWebmail();
});
});
这里是作为选项卡创建回调执行的内容脚本(当获取电子邮件登录页面并加载DOM时),以及当提交电子邮件凭据并加载客户端选择页面的DOM时(现在不工作)
var openEmail = function() {
var loc = window.location.href;
if(loc === 'http://mywebmaillogin.com:2095/') {
var submit = document.getElementById('login_submit');
user.value = 'myusername';
pass.value = 'mypassword';
if(user.value === 'myusername' && pass.value === 'mypassword') {
submit.click();
}
else {
openEmail();
}
}
if(loc.indexOf('http://mywebmaillogin:2095/') > -1 && loc.indexOf('login=1') > -1) {
alert('I work');
}
}()
任何帮助都将不胜感激...谢谢!
3条答案
按热度按时间fnx2tebb1#
正如@NycCompSci提到的,你不能从内容脚本调用chrome API。我可以通过消息传递将api数据传递给内容脚本,所以我想在这里分享一下。首先在background.js中调用
onUpdated
:清单
背景. js
然后,您可以扩展该脚本,将数据(包括新的url和其他chrome.tabs.onUpdated信息)从background.js发送到内容脚本,如下所示:
背景. js
现在您只需要在内容脚本中侦听该数据:
内容脚本. js
xesrikrc2#
使用chrome.tabs. on已更新
梅菲斯特·杰森
内容脚本.js
背景.js
ddarikpa3#
基于/感谢@ztrat4dkyle的回答,什么对我有效:
清单. json
背景. js
内容. js