2011-08-15 45 views
0

這是一個javascript,旨在成爲Chrome擴展的一部分。當我按下添加按鈕時它應該打印出ID。 但是,它的作用是我必須按添加TWICE以將ID添加到我想要的位置(我使用此代替警報) 調試時,它表示bookmarkBarID未定義...我想這是錯誤,但我不知道如何解決它。請幫 這裏是整個代碼:第二次運行腳本後返回結果,未定義錯誤?

<!doctype html> 
<html> 
    <head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <script> 
var bookmarkBarID; 
function getBM(){ 
chrome.bookmarks.getTree(function(tree){ 
bookmarkBarID=tree[0].children[0]; 
}); 
} 



function CreateNewItem() 
{ 
$('#submit').click(function(){ 
getBM() 
console.log(bookmarkBarID); 
$('.bookmark').append(bookmarkBarID.id); 
}) 
} 

    </script> 
    </head> 
<body onload="CreateNewItem();" style="width:1200px"> 
<div class="bookmark"></div> 
    <input type="text" value="enter url here" id = 'urlLink' /> 
    <input type="text" value="enter Name title" id='linkName'/> 
    <input type="text" value="" id='folderName' /> 
    <div><button id="submit">Add</button></div> 
</body> 
</html> 

回答

2

chrome.bookmarks.getTree異步功能,這意味着它運行在相同的時間,你的其他代碼。該函數在後執行,其餘代碼將執行。要使用該函數的結果,您需要提供一個將隨結果調用的回調函數。在這種情況下,你需要移動到$('.bookmark').append(bookmarkBarID.id);回調函數:

function getBM(){ 
chrome.bookmarks.getTree(function(tree){ 
bookmarkBarID=tree[0].children[0]; 
console.log(bookmarkBarID); 
$('.bookmark').append(bookmarkBarID.id); 
}); 
} 



function CreateNewItem() 
{ 
$('#submit').click(function(){ 
getBM(); 
}) 
} 

注意:你應該使用$(document).ready(CreateNewItem);代替onload(假設你正在使用jQuery)。

+0

謝謝!這是否意味着每次我想使用書籤操作(我打算使用此腳本搜索特定文件夾ID並在其中創建鏈接和文件夾)時,我必須再次運行整個函數,否則我必須運行此函數,找到我想要的所有對象,並傳遞給下一個函數(操縱結果,創建文件夾)。有第三種方法嗎? – deckoff

+0

您可以隨時使用任何有效的回調調用'chrome.bookmarks.getTree'。每次調用它時,給定的回調都會被調用一次(除非出現錯誤)。 –

+0

我想要做的是在腳本開始時找到一個文件夾及其ID,這樣我就可以使用該ID在該文件夾內創建鏈接和文件夾。我必須查看給定文件夾內的所有文件夾名稱,才能找到我需要的文件夾名稱。一旦我這樣做,雖然我不需要再做一次,所以我想運行chrome.bookmarks.getTree一次... – deckoff

相關問題