引用网址未被正确抓取

时间:2015-05-19 18:34:33

标签: javascript jquery referrer

我正在尝试提取引荐来源网址,对其应用正则表达式,并将结果用作文本字段中的值。问题是当前的实现没有将引用者URL拉入文本字段,这可能来自单击上一页上的链接,但允许我输入值。它应该使用引荐来源自动填充文本字段,并允许用户根据它进行搜索(或者手动搜索,如果他们之前没有点击链接)。控制台为行Uncaught TypeError: Cannot read property '1' of null输出$("#imageid").val(encodeID[1]);,因为它试图在结果字符串的数组中找到第二个值(意味着没有引用的URL被拉出)。不确定我的逻辑是什么错误

案例1

使用此逻辑,它确实会提取引荐来源网址,但不允许用户手动搜索(没有引荐来预先填充搜索字段)

var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 1) {
    $("#imageid").val(encodeID[1]);
} else {
    var regexp = /assets\/(\d+)/;
    var encodeID = regexp.exec(window.document.referrer);
    $("#imageid").val(encodeID[1]);
}

案例2

附加 if语句,它不会提取引荐来源网址,但允许用户手动搜索

var regexp = /assets\/(\d+)/;
    var encodeID = regexp.exec(window.document.referrer);
    if (encodeID !== null && encodeID.length == 1){
       $("#imageid").val(encodeID[1]);
    }else if($("#imageid").val() !== ''){
        var regexp = /assets\/(\d+)/;
        var encodeID = regexp.exec(window.document.referrer);
       $("#imageid").val(encodeID[1]);
    }

用户需要能够点击引荐来源网址并让其预先填充该字段,或者手动搜索。

2 个答案:

答案 0 :(得分:0)

您遇到了问题,因为数组从0开始编号,而不是1。

if (encodeID !== null && encodeID.length == 1) {
    $("#imageid").val(encodeID[1]);
}

如果encodeID的长度为1,则它只有一个元素,即encodeID[0],但您尝试设置的值等于encodeID[1],如果不存在则数组的长度为1。

答案 1 :(得分:0)

所以解决方法是将数组长度设置为2:

var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 2){
   $("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
   $("#imageid").val(encodeID[1]);
}