0

一致する文字列についてドキュメントをクエリし、取得した文字列から URL を作成するコードを作成しました。タグ要素を調べて一致するものを探し、URL 文字列を作成してから、指定されたparentNodeオブジェクトにリンクを追加します。このコードはプレーンな JavaScript では問題なく動作しますが、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)

グリースモンキーに貼り付けると、グリースモンキーの「編集」画面から次のエラーが表示されます。

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

また、「placeHolder」が定義されていないこともわかりましたが、現在これを複製することはできません。変数のスコープ方法に関係があると感じています。「var タグ」を追加しました。および「var プレースホルダー;」スクリプトの先頭に移動しましたが、役に立ちませんでした。

4

1 に答える 1