0

我试图构建一个Chrome扩展,获取当前域打开的年龄,在此年龄生成一个不透明度值,并将此不透明度值应用于要置于顶部的叠加层的当前页面。在Chrome扩展中使用ajax查询

这是我不工作的做法:

的manifest.json

{ 
    "name": "overlay", 
    "version": "0", 
    "description": "art project", 
    "background": {"page": "background.html"}, 
    "manifest_version": 2, 
    "browser_action": { 
    "name": "art project", 
    "icons": ["icon.png"], 
    "default_icon": "icon.png" 
}, 
    "content_scripts": [ { 
    "js": [ "jquery-2.1.4.min.js", "background.js"], 
    "css": ["customStyles.css"], 
    "matches": [ "http://*/*", "https://*/*"] 
}] 
} 

background.js

var domain = location.hostname; 

$.ajax({ 
    url: 'http://whois.webhosting.info/' + domain, 
    type: 'GET', 
    success: function(res) { 

    // find table with class "body_text" 
    $(res.responseText).find('table.body_text').appendTo('body'); 
    var creation_date = $(res.responseText).find('table.body_text > tbody > tr:nth-child(5) > td:nth-child(2)').html(); 

    var str = creation_date.split(/(\s+)/); 

    // calculate the month number from month in string format 
    var monthcalc = ("JanFebMarAprMayJunJulAugSepOctNovDec".indexOf(str[0])/3 + 1); 

    // join the date 
    var domainage = str[2] + " " + monthcalc + " " + str[1]; 

    // create the date 
    var firstdate = new Date(domainage); 

    var today = new Date();   
    var dayDiff = Math.ceil(today.getTime() - firstdate.getTime())/(1000 * 60 * 60 * 24 * 365); 
    var age = parseInt(dayDiff); 
    $('#age').html(age+' years old'); 

    // calculate opacity of patina 
    patinaOpacity = (dayDiff * 1.5)/100; 
    console.log(patinaOpacity); 

    $("body").prepend('<div class="overlay">PATINA OVERLAY</div>'); 

    $(".patina-overlay").css({ 
    "z-index": "10000000000000", 
    "background": "black", 
    "opacity": patinaOpacity, 
    "position": "fixed", 
    "width": "100%", 
    "height": "100%", 
    "pointer-events": "none", 
    }); 

    } 
}); 

奇怪的是,此代码工作完全正常的HTML文档中 - 但不是当我将它实现为Chrome扩展时。 Chrome扩展开发工具总是向我展示,我在这一行有一个语法错误var str = creation_date.split(/(\s+)/;,我不知道它有什么问题。

+0

你确定它是一个_syntax_错误,或者它是一个运行时错误,沿着_cannot读取属性'split'undefined_?的行吗? – Xan

+0

@Xan是啊,之前我也有错误'未捕获TypeError:无法读取属性'分裂'undefined' ... – Retador

+0

你没有看到关于CORRS之前的消息吗? – Braiam

回答

1

虽然很难确切地说明代码失败的原因,但必须说的是,查询Web WHOIS服务永远不会结束。

此类服务几乎总是对重复查询提供保护:您可能正在触摸CAPTCHA或类似的防御措施。没有无限制的免费WHOIS服务/ API是有原因的。

然后你的代码将无法找到所需的元素,因为你不检查 - 在某处进一步分解。即使把它放在一边,交叉源AJAX需要你在清单中的权限字段中声明你正在查询的地址。虽然我想在这种情况下,它不会调用success函数。


另一种可能性是非常可疑操作$(res.responseText),试图解析HTML。您正在将外部代码(可能包含脚本)注入当前文档的上下文中。对于你无法控制的数据来说这不是一个好主意。