2011-08-12 52 views
2

有沒有通過JavaScript檢測Safari擴展是否已安裝的方法? https://extensions.apple.com有一些做法,因爲如果已經安裝了擴展,它們會將安裝鏈接更新爲「已安裝」。但是,我無法弄清楚他們是如何做到的。我追查回型「SafariExtensionGalleryController」的對象,但是這是據我得到的。檢測是否安裝了Safari擴展

難道蘋果把特殊的鉤子到推廣體系只爲自己的東西??

失落......

THX,喬爾

+0

當我轉到該頁面時,即使安裝了擴展程序,安裝鏈接也不會更改。 – dan8394

+0

你是對的......暫時。當我上週訪問擴展程序的網址時,官方擴展程序(即一鍵安裝的擴展程序)的鏈接已更新,說明已安裝它們的鏈接。現在,沒有任何擴展程序似乎是正式的,因爲它們需要三次安裝。我的猜測是,這是暫時的,但在蘋果的網站上。 – JayRu

回答

1

如果您是擴展的作者,那麼你就可以檢測是否安裝了自己的擴展。我簡單地注入一種無形的串到我的網站,我再掃描時頁面加載。如果字符串已被注入,我的擴展必須安裝,然後你可以做任何你喜歡的結果。

identifier.js

if (window.top === window) 
{ 
    //detect if the extension has been installed and disable "Install" button if that's the case 
    if (document.title === "YOUR PAGE TITLE") //we don't want to inject the string into any website, just ours 
    { 
     var p = document.createElement("noscript"); 
     var texto = document.createTextNode("Extension Installed"); 
     p.appendChild(texto); 

     document.body.appendChild(p); 
    } 
} 

我懷疑蘋果做到這一點編程方式使用Safari瀏覽器用來顯示網站的網頁視圖,然後運行JavaScript腳本的內部是變化取決於擴展的擴展網站在Safari的代碼返回。

希望這會有所幫助!

+0

而不是使用'document.title'來確定當前網頁是否在您的網站上,請使用'document.URL'。任何網頁都可以將其標題設置爲任何內容。 – breakingobstacles

0

要檢測您的擴展服務器端,最簡單的方法是使用內容腳本在您的域中注入會話cookie。

在Chrome和Firefox中,您可以注入HTTP標頭,但Safari中的API不允許使用它。

Cookie的問題:如果您的用戶卸載擴展程序,您只有在他的會話結束時纔會注意到(關閉瀏覽器)。