我有一個Chrome擴展程序,它使用ahref標記替換電話號碼。在這個ahref標記中我想調用一個javascript函數。爲了簡化,我使用「javascript:alert('hey')」作爲href值。當我執行下面的命令時,我得到了「regs is not defined」,但是對於console.log,它顯示了正確的值。我試圖追加到現有的問題,因爲它是相關的,但有人刪除它,並要求我發佈一個新問題。Chrome擴展程序中的TreeWalker
Chrome extension, making a link from key words in the body
var re = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]??)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]??|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})/
var regs;
var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, function(node) {
if((regs = re.exec(node.textContent))) {
// make sure the text nodes parent doesnt have an attribute we add to know its all ready been highlighted
if(!node.parentNode.classList.contains('highlighted_text')) {
var match = document.createElement('A');
match.appendChild(document.createTextNode(regs[0]));
console.log(regs[0]);
match.href = "javascript:alert(regs[0])";
console.log(node.nodeValue);
// add an attribute so we know this element is one we added
// Im using a class so you can target it with css easily
match.classList.add('highlighted_text');
var after = node.splitText(regs.index);
after.nodeValue = after.nodeValue.substring(regs[0].length);
node.parentNode.insertBefore(match, after);
}
}
return NodeFilter.FILTER_SKIP;
}, false);
// Make the walker step through the nodes
walker.nextNode();
'console.log'顯示正確的值,因爲它是在擴展的上下文中執行的,'alert'不是因爲它在頁面的上下文中。查看[isolated world](http://developer.chrome.com/extensions/content_scripts.html#execution-environment) – BeardFist 2013-05-07 02:02:55
@BeardFist當用戶點擊鏈接時調用函數的最佳方式是什麼?該功能必須包含用戶點擊的電話號碼。顯然建立一個點擊撥號擴展。 – 2013-05-07 05:09:15
只需使用['onclick'](https://developer.mozilla.org/en-US/docs/DOM/element.onclick)處理程序,以便它在您的代碼中執行。 – BeardFist 2013-05-07 05:14:24