2013-05-24 3 views
0

Я создал код для запроса документа для соответствия строк и создания URL-адреса из полученных строк. Он просматривает элементы тега, ищущие совпадения, создает строку URL, затем добавляет ссылку на назначенный объект parentNode. Этот код отлично работает на простом javascript, но он ломается, когда я вставляю его в Greasemonkey. Я не могу понять, почему.innerText не указан в сценарии Greasemonkey

Вот полностью рабочий вариант, когда я вставить его в хромированной консоли:

//loop through elements by classname and find string matches 
regexQueryEmail = "(AccountEmailAddress\\s)(.+?)(\\n)" 
regexQueryContact = "(Contact with ID:)(.+?)(\\D)" 

var Tags = document.getElementsByClassName('msg-body-div') 
for (i = 0; i < Tags.length; i++) { 
    matchEmail = Tags[i].innerText.match(regexQueryEmail) 
    matchContact = Tags[i].innerText.match(regexQueryContact) 
    if (matchEmail != null) { 
     var emailString = matchEmail[2] 
     var placeHolder = Tags[i] 
    } 
    if (matchContact != null) { 
     var idString = matchContact[2] 
    } 
} 

var urlFirst = "https://cscentral.foo.com/gp/stores/www.foo.com/gp/communications/manager/main/191- 4559276-8054240?ie=UTF8&customerEmailAddress=" 
var urlSecond = "%3E&initialCommId=" 
var cscURL = urlFirst + emailString + urlSecond + idString 

var cscLink = document.createElement('a') 
cscLink.innerText = 'Communication History' 
cscLink.href = cscURL 
placeHolder.parentNode.appendChild(cscLink) 

Когда я вставить его в Greasemonkey, это дает мне эту ошибку с «Edit» экрана Greasemonkey:

/* 
    Exception: Tags[i].innerText is undefined 
    @Scratchpad:18 
*/ 

Он также сказал мне, что «placeHolder» не определено, но я неспособен повторить это прямо сейчас. У меня такое чувство, что оно имеет какое-то отношение к тому, как изменяются переменные. Я добавил «var Tags»; и «var placeHolder»; на вершине скрипта, и это не помогло.

ответ

1

Firefox использует element.textContent.

https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent?redirectlocale=en-US&redirectslug=DOM%2FNode.textContent

Переменная placeholder в никогда не объявлен в области вы пытаетесь использовать его. Вместо этого он где-то объявлен в вашем for цикле. Убедитесь, что вы объявили его в том же объеме.

E.g.

var Tags = document.getElementsByClassName('msg-body-div') 

var placeholder; // declare in same scope 

for (var i = 0; i < Tags.length; i++) { 

    // lookup the tag once 
    var tag = Tags[i]; 

    // get the text only once 
    var text = tag.textContent; 

    matchEmail = text.match(regexQueryEmail) 
    matchContact = text.match(regexQueryContact) 

    if (matchEmail != null) { 
     var emailString = matchEmail[2] 

     placeHolder = tag // deleted var statement 
    } 
    if (matchContact != null) { 
     var idString = matchContact[2] 
    } 
} 

... 

// now you can use it. 

if (placeHolder) { 
    placeHolder.parentNode.appendChild(cscLink); 
} 
+0

Вы прямо на. Большое спасибо! –

Смежные вопросы