2012-09-13 64 views
1

我已經寫了一個Hello World示例擴展。現在我正在嘗試編寫一個Chrome擴展來獲取某個JavaScript變量的值(如果聲明的話)。活動標籤的源代碼 - 獲取變量的值

所以我們說有一個

var test = 'a'; 
在源代碼中

。我想獲得a的價值。

更新:我做有機會獲得「原始」網站的代碼,但我知道,這個變量是永遠存在的,並且具有一定的價值,總是不同的。

警報會做。 (可以從分機的頁面提醒您)

我看到有些內容像「權限」和「標籤」,我不知道我可能會丟失什麼。

我試圖搜索,發現類似的東西,但this示例只是點擊鏈接時不做任何事情。

回答

1

從內容腳本中,您無法訪問在頁面上聲明的變量。

documentation摘自:

內容腳本在一個特殊的環境中執行所謂的隔離的世界。他們可以訪問他們注入的頁面的DOM,但不能訪問頁面創建的任何JavaScript變量或函數。

我看到的唯一方法是在後臺頁面中通過XHR加載腳本源並解析它。然後,如果要將結果發送到內容腳本,則可以使用message passing。請注意,如果變量的值已被後續腳本更改,則此解決方案將不起作用。

0

如果您可以控制該頁面,則可以將該值放入頁面上的隱藏HTML元素,然後您的擴展程序可以使用內容腳本來提取該元素。

網站上

var test a = 'a'; 
document.documentElement.dataset["a"] = a; 

在擴展的內容腳本:

var a = document.documentElement.dataset["a"]; 

只要確保內容腳本頁面上的腳本後執行(例如通過增加"run_at": "document_end"您清單)

+0

我無法控制「原始」 – Ash

+0

您可以查看頁面的代碼並查看該變量是否被添加到元素並檢查該元素的值。 但是,這是一個巨大的解決方法,它需要以這種方式編寫代碼。因此,如果您想將其應用於「未知」網站(意思是:沒有您知道並可以測試的特定網頁集),這也不起作用。 – greiner