2011-08-25 79 views
1

是否可以在不違反安全限制的情況下在當前文檔中顯示本地圖像。文檔中的Firefox擴展顯示圖像

實施例:圖像處於chrome://myExtension/content/2.png

$myImg=jQuery("#myImg", doc);

$myImg.attr("src","chrome://beSure/content/2.png");

Error Console: Security Error: Content at https://www.google.com/accounts/ServiceLogin?....&from=login may not load or link to chrome://myExtension/content/2.png.

工作與非本地鏈路例如:

$myImg=jQuery("#myImg", doc);

myImg.attr("src","http://cdn1.iconfinder.com/data/icons/classic-cars-by-cemagraphics/128/minicar_128.png");

圖片來自有效網址,因此沒問題。但我如何顯示本地圖像?

回答

2

您的chrome包需要用中的contentAccessible標誌聲明,請參見documentation。默認情況下,網頁不再允許從chrome://加載圖像,這之前允許網頁通過加載圖像來檢測已安裝的擴展。

另一種可能性應該是使用image.src屬性,而不是設置屬性:

var myImg = doc.getElementById("myImg"); 
myImg.src = "chrome://beSure/content/2.png"; 

這應該工作,因爲在這裏你(特權)腳本直接設置圖像的位置。另一方面,屬性更改是異步處理的,所以這是通過網頁的特權完成的。

+0

我以前想過,試過設置'.src'屬性,但沒有奏效。我需要的是你的第一個建議,將'contentAccessible'標誌設置爲'yes'。我在更新擴展程序時簡要閱讀了它,但我錯過了它。感謝您的回答。 – yuceel

1

如果您使用jQuery創建新元素,請確保使用正確的上下文。

var $tr = $('tr', content.document); 
$tr.append($('<td>New cell</td>')); // BAD 

將工作,但新的單元格會表現奇怪。例如,當您右鍵單擊它時,您將不會獲得任何上下文菜單。

要在創建新的DOM節點

$tr.append($('<td>New cell</td>', content.document)); // GOOD 

當這樣你可以使用chrome:// -URLs你打算解決這個文檔使用的上下文。 當然你也必須啓用contentAccessible弗拉基米爾帕蘭特的答案中所述。