一致する文字列についてドキュメントをクエリし、取得した文字列から 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 プレースホルダー;」スクリプトの先頭に移動しましたが、役に立ちませんでした。