我正在尝试创建一个小的 Chrome 扩展程序,以便在用户使用我们的公共 IP 地址之一时添加标头。我对 javascript 比较陌生,可以使用一些帮助。
这是获取公共IP地址的函数:
function getIP(){
$.getJSON("http://ip-api.com/json",
function(data){
if(data.query == 'xxx.x.xxx.xxx'){var indist = 1;}else{var indist = 0;}
console.log(indist);
return(indist);
});
}
Run Code Online (Sandbox Code Playgroud)
当我检索公共 IP 时
var indist = getIP();
Run Code Online (Sandbox Code Playgroud)
然后是修改 Chrome 扩展中的 headers。
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
if(indist === 1){
details.requestHeaders.push({name:"X-YouTube-Edu-Filter",value:"xxxxxxxxxxxxx"});
return {requestHeaders: details.requestHeaders};}
},{urls: ["<all_urls>"]},["requestHeaders", "blocking"]
);
Run Code Online (Sandbox Code Playgroud)
这是我第一次尝试,我想没有得到结果。理想情况下,当用户在 Youtube 上提出任何请求时,我想检查一次用户的公共 IP 地址,然后根据该地址添加标头。
任何帮助将不胜感激!
我正在尝试在 chrome 扩展中添加谷歌分析事件跟踪,但它似乎没有正确地将事件发送到服务器。我正在从内容脚本向后台脚本发送一条消息消息,让它知道跟踪事件,并使用 _gaq.push() 尝试将事件发送到服务器。我将包括我在这里得到的东西,并希望得到一些帮助,因为我可以找到什么是错的/遗漏的
这是我的清单文件,我已将谷歌分析添加到 content_security_policy
{
"name": "XXXXXX",
"short_name": "XXXXXX",
"version": "0.4.2",
"description": "XXXXXX",
"icons": { "128": "icon_128.png", "48": "icon_48.png" },
"permissions": ["storage"],
"content_security_policy" : "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
"content_scripts": [
{
"matches": [
"XXXXXX",
"XXXXXX"
],
"js": ["jquery.js","jquery.ba-hashchange.min.js","contentscript.js"],
"run_at": "document_end"
}
],
"background" : {
"scripts" : ["background.js"],
"persistent" : false
},
"manifest_version": 2
}
Run Code Online (Sandbox Code Playgroud)
这是我的内容脚本中的调用,让后台脚本知道使用谷歌分析跟踪事件
//send message to background.js for analytics event tracking
chrome.runtime.sendMessage({
action : 'analytics_add_item',
item_name : item.name,
item_stat …Run Code Online (Sandbox Code Playgroud) 我是 Javascript/JSON 的真正菜鸟,所以这可能非常明显。我将值存储到 chrome.storage 的 chrome 扩展 JS 文件中:
chrome.storage.sync.set({'username' : username}, function() {
console.log('Saved',username);
});
chrome.storage.sync.set({'password' : password}, function() {
console.log('Saved', username);
});
Run Code Online (Sandbox Code Playgroud)
我知道它正确传递,因为 console.log 返回正确的值。
然后我尝试在我的内容脚本中检索它,但它只返回 [object Object]。
chrome.storage.sync.get("username", function (username) {
console.log("Passed successfully: Username "+username);
studentUsername = username;
});
chrome.storage.sync.get('password', function (password) {
console.log("Passed successfully: Password "+password);
studentUsername = username;
});
Run Code Online (Sandbox Code Playgroud)
我不确定它为什么这样做。
javascript google-chrome google-chrome-extension google-chrome-storage
我有 2 个用于用户名和密码的输入文本框。还有一个选择列表以获取某些价值。现在我希望用户添加这些值,并且我正在尝试使用 chrome 存储 API 保存这些值。
现在,每次我将变量存储为添加了多少条记录时,如计数器。用于存储我只是这样使用
var skillsSelect = document.getElementById("orgTypeId");
var selectedOrgType = skillsSelect.options[skillsSelect.selectedIndex].value;
var countTotalRecords = totalRecordsVal +1;
var username = 'username'+countTotalRecords;
var password = 'password'+countTotalRecords;
var orgType = 'orgType'+countTotalRecords;
chrome.storage.sync.set({
username: $("#usernameid").val(),
password: $("#passwordid").val(),
orgType: selectedOrgType,
'totalRecords':countTotalRecords
}, function(){
alert('Success!');
});
Run Code Online (Sandbox Code Playgroud)
并且为了检索我正在尝试这样
var getItems = [];
for(var i = 1; i <10; i++){
var username = 'username'+i;
var password = 'password'+i;
var orgType = 'orgType'+i;
getItems.push(username);
getItems.push(password);
getItems.push(orgType);
}
console.log('==========getItems======',getItems);
chrome.storage.sync.get(getItems, function(items){
var keys = Object.keys(items); …Run Code Online (Sandbox Code Playgroud) 哪个 Chrome API 允许我编写可以通过非冲突热键(如Ctrl- Shift- B)或触控板手势(在 Mac 上)激活的扩展程序?
我正在查看Chrome 扩展 API和Chromium文档,但还没有找到任何东西。
我正在开发具有登录弹出窗口的 chrome 扩展程序。所以这个想法是为了让扩展工作,它需要用户登录,以便它可以与我们的 API 交互并获取/发布数据。
因此,我覆盖browserAction以检查用户是否已登录,如果未登录,则应显示登录弹出窗口。我的问题是当我再次单击扩展图标时,它会重新打开同一个登录弹出窗口。我如何防止这种情况发生,并且如果登录窗口打开,只应显示一个实例?
背景.js
// omitted some codes for brevity
chrome.browserAction.onClicked.addListener(function () {
// omitted some codes for brevity
chrome.windows.create({
'url': 'login.html',
'type': 'popup',
'width': width,
'height': height,
'left': (screen.width/2) - (width/2),
'top': (screen.height/2) - (height/2),
'focused': true
});
});
Run Code Online (Sandbox Code Playgroud) 我已经启用了“chrome://flags/#extensions-on-chrome-urls”,它应该允许我创建可以在 chrome:// 网站上运行的扩展。但是,当我尝试解压缩我的扩展程序时,它失败并显示错误消息:“'content_scripts[0].matches[0]' 的值无效:无效方案。” 我不相信我的 script.js 有问题,因为当我用 http 或 https 站点替换“chrome://extensions”部分时,解包不会失败。任何帮助将不胜感激,有谁知道修复?
清单.json:
{
"name": "Does something on chrome://extensions",
"version": "1.2",
"description": "Read the name",
"manifest_version": 2,
"browser_action": {
"default_title": "Ext",
"default_popup": "popup.html"
},
"content_scripts": [ {
"matches": ["chrome://extensions"],
"js": ["script.js"]
} ]
}
Run Code Online (Sandbox Code Playgroud) 我正在 ReactJS 中构建一个 chrome kiosk 应用程序,它需要访问它正在运行的设备的 deviceId 以进行日志记录。我使用以下代码调用 chrome.enterprise.deviceAttributes.getDirectoryDeviceId:
const getDeviceId = (cb) => {
if (!chrome.enterprise) {
if (cb) {
cb();
}
return;
}
// get device id
chrome.enterprise.deviceAttributes.getDirectoryDeviceId(assetId => {
deviceId = assetId;
if (cb) {
cb();
}
});
};
Run Code Online (Sandbox Code Playgroud)
之后,通过执行以下操作来调用该函数:
getDeviceId(() => {
debug('Got device id: %s', deviceId);
});
Run Code Online (Sandbox Code Playgroud)
现在,我知道此代码只能在已注册的 ChromeOS 设备上运行。我也知道 chrome.enterprise.deviceAttributes 仅适用于通过策略预安装的扩展程序。因此,我只能在将其提交到 ChromeOS 商店并通过开发人员仪表板安装后对其进行测试。
长话短说:上面的代码没有返回 deviceId,这导致我所有的 api 调用失败,我无法真正调试它,因为它被安装为 kiosk 应用程序。我想知道这里是否有人可以告诉我我做错了什么以及如何解决这个问题。
提前致谢!
javascript google-chrome-os google-chrome-extension google-chrome-app reactjs
我的兴趣是仅在重载时间处理网站,以便自动填充工作。例如,当销售开始并且网站蜂拥而至时,它有时会崩溃。我需要捕获站点错误,以便我可以从后台脚本重新加载页面。如Chrome 扩展:后台脚本捕获网络和 HTTP 错误中所述,我们可以获得页面加载错误。
页面加载错误可能是由于网络问题、站点问题、DNS 问题以及站点过载问题造成的。
我想要的只是重新加载网页,以防由于某些错误而未加载。
我为 Chrome 和 Firefox 收集了许多错误代码:
这不是完整列表。我见过这些错误,所以我列出了它们。我想知道当 (HTML) 页面无法加载时所有错误代码的列表,而不是使用反复试验找到它们。
这是我想如何使用的示例源代码:
chrome.webRequest.onErrorOccurred.addListener(function (details)
{
if ("type" in details && ['main_frame', 'sub_frame'].indexOf(details.type) == -1)
{
if (details.url.match(/.js$/))
{
console.log("Error in download of this file:", details.url);
}
return;
}
if (details.tabId == -1)
{
return;
}
var check_all_errors = function(err)
{
var all_errors = [
"net::ERR_ABORTED",
"net::ERR_EMPTY_RESPONSE",
"net::ERR_CONNECTION_TIMED_OUT",
"net::ERR_CONNECTION_REFUSED",
"net::ERR_CONNECTION_RESET",
"NS_ERROR_NET_ON_CONNECTING_TO",
'NS_ERROR_NET_ON_WAITING_FOR',
'NS_ERROR_NET_ON_CONNECTING_TO'
];
for( var i=0;i<all_errors.length;++i) …Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension firefox-addon-webextensions
我正在使用 AngularJs1.6 开发 chrome 扩展。我想通过给定元素的查询选择器的扩展突出显示网页上的一个元素。
前任。在下面的第一张图片中,我想将鼠标悬停在 Components/Class Names 表中的BUTTON.info-popover-button.btn.btn-link上,并触发 API 调用以在第二张图片中执行相同的操作。