2013-07-29 46 views
0

我在內容腳本的幫助下添加了一個彈出的Div。我添加了一個按鈕來關閉該DIV,爲此目的,我爲我的函數調用onClick事件popClose()但它給函數未定義。我如何使它發生?下面Chrome擴展程序:如何調用內容腳本中定義的函數?

我的內容腳本代碼給出:

var currentURL = document.location.href; 
var body = document.getElementsByTagName("body")[0]; 
body.setAttribute("style", "background-color:red"); 

//get Top BlueBar Reference 
var blueBar = document.getElementById("blueBar"); 
var blueBarHtml = blueBar.innerHTML; 

//popUp Div for Options 

var popUpDiv = "<div onclick='closepop();' class='popUpDiv'><div class=close>X</div></div>"; 
blueBar.innerHTML = popUpDiv+blueBarHtml; 

//get page Nav ID 
var tinyMan = chrome.extension.getURL("tinyman.png"); 
var pageNav = document.getElementById("pageNav"); 

var red = chrome.extension.getURL("red.png"); 
var yellow = chrome.extension.getURL("yellow.png"); 
var green = chrome.extension.getURL("green.png"); 
var blue = chrome.extension.getURL("blue.png"); 

var pageNavHtml = pageNav.innerHTML; 
var liHTML = '<li id="Extra" class="navItem topNavLink middleLink">'; 
liHTML+='<a><img src="'+tinyMan+'" border="0" style="margin-bottom: 4px; display: inline-block;">'; 
liHTML+="<a>" 
liHTML+='<div class="menuPulldown" style="display:block;"></div>' 
liHTML+='</a>'; 
liHTML+='</li>'; 
//set new HTML 

pageNav.innerHTML = liHTML+pageNavHtml; 

function closepop() 
{ 
    alert("jj"); 
} 
+1

您是否嘗試在將其設置爲回調之前定義該函數? (即,將您的底線移至'var popUpDiv ...'上方) –

+0

是的。沒有區別 – Volatil3

+2

可能的重複:[使用內容腳本在頁面中注入代碼](http://stackoverflow.com/q/9515704/710446)。也是相關的:[網站是否可以調用瀏覽器擴展?](http://stackoverflow.com/q/10526995/710446) – apsillers

回答

1

嘛,我只是說我在DOM的頭功能的內容,然後把它稱爲。

var head = document.getElementsByTagName("head")[0]; 
fn = "function closepop(){alert('jj');}"; 

var script = document.createElement('script'); 
script.setAttribute("type", "application/javascript"); 
script.textContent = fn; 
head.appendChild(script); 

有沒有更乾淨的方法可以做到這一點?

+1

一般而言,不;但在你的特殊情況下,是的。內容腳本共享主頁面的DOM,因此內容腳本可以「聽到」像「click」這樣的主頁面DOM事件。您可以使用['addEventListener'](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener)將'closepop'作爲偵聽器進行綁定,而不是使用內聯'onclick'偵聽器對於你的div上的'click'事件:'document.querySelector(「。popUpDiv」)。addEventListener(「click」,popup)'' – apsillers

相關問題