基于公共IP修改请求头的Chrome扩展
Chrome Extension to Modify request headers based on Public IP
我正在尝试创建一个小型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);
});
}
当我检索Pubic IP 时
var indist = getIP();
然后在Chrome扩展中修改标题。
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"]
);
这是我的第一次尝试,我想我还没有得到结果。理想情况下,当用户在Youtube上请求任何内容时,我想检查用户的公共IP地址一次,然后根据该地址添加标题。
如有任何帮助,我们将不胜感激!
getIP
实际上不返回任何内容,因为$.getJSON
是异步的。
您的代码如下:
function getIP(){
$.getJSON("http://ip-api.com/json", someFunction);
}
这读作"将请求排队,完成后调用someFunction
"。然后该语句终止,函数getIP
结束,不返回任何内容。
因此,回调中的return
值丢失了。
此外,您的范围界定是错误的:
if(data.query == 'xxx.x.xxx.xxx') {
/* scope begins */
var indist = 1; // Local, only exists within this branch!
/* scope ends */
} else {
var indist = 0;
}
console.log(indist); // Is not related to above, probably undefined
作为一个简单的修复方法,由于您在onBeforeSendHeaders
处理程序中使用了一个全局变量,因此只需在回调中分配它:
function getIP(){
$.getJSON(
"http://ip-api.com/json",
function(data) {
if(data.query == 'xxx.x.xxx.xxx') {
indist = 1; // GLOBAL variable
} else {
indist = 0;
}
console.log(indist);
}
);
}
也就是说,您可能希望限制代码造成的损害。在每一个网络请求上运行阻塞代码会使Chrome慢到爬行。重写代码,只在满足条件时启用处理程序,然后可能只在YouTube请求上运行它。
function getIP(){
$.getJSON(
"http://ip-api.com/json",
function(data) {
chrome.webRequest.onBeforeSendHeaders.removeListener(addHeader);
if(data.query == 'xxx.x.xxx.xxx') {
chrome.webRequest.onBeforeSendHeaders.addListener(
addHeader,
{urls: ["*://*.youtube.com/*"]},
["requestHeaders", "blocking"]
);
}
}
);
}
function addHeader(details) {
details.requestHeaders.push({name:"X-YouTube-Edu-Filter",value:"xxxxxxxxxxxxx"});
return {requestHeaders: details.requestHeaders};
}
相关文章:
- chrome扩展中的navigator.geolocation.getCurrentPosition
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- chrome扩展更改主机/域警告
- 如何在chrome扩展中重定向到html页面
- Chrome扩展没有't在重新加载之前考虑期权价值
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 从选项页面更新chrome扩展清单权限
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- Chrome扩展:遍历不同的页面并收集数据
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 可以从Chrome扩展修改窗口对象吗
- 从popup.js|Chrome扩展访问DOM
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 在Chrome扩展内部输出Google API调用
- 检查是否存在使用chrome扩展的javascript库
- 从Chrome扩展访问Google Cloud SQL数据库
- Chrome扩展,Chrome.tabs.query的结果未定义
- 为tweet构建chrome扩展
- 在chrome扩展中使用AJAX获取目录中的文件数