2012-01-10 1 views
1

Я новичок в разработке расширений сафари. Мне нужно получить доступ к куки-файлам браузера, определенным на веб-сайте. Я знаю, что это возможно с развитием расширения хрома. Как это сделать с развитием расширения сафари.Чтение браузера cookie в расширении сафари

+1

Если есть способ сделать это, Apple не говорит. – canisbos

ответ

3

Из введенного сценария вы можете отправить файлы cookie на расширение. Поэтому при создании расширения у вас есть global.html и injected.js.

injected.js:

var cookies = document.cookie; 
safari.self.tab.dispatchMessage("setCookies",cookies); 

global.html (без HTML-тегов):

var cookies = null; 

function getCookies(incMsg) { 
    cookies = incMsg.message; 
    alert('I received them :) \n\n'+cookies); 
} 

safari.application.addEventListener("message",getCookies,false); 

Код выше будет отправлять все куки на продление каждый раз при загрузке страницы. Тогда, конечно, вам все равно нужно прочитать куки. Я использовал что-то вроде следующей функции (в global.html):

function readCookie(name) { 
    if(cookies) { 
     var nameEQ = name + "="; 
     var ca = cookies.split(';'); 
     for(var i=0;i < ca.length;i++) { 
      var c = ca[i]; 
      while (c.charAt(0)==' ') c = c.substring(1,c.length); 
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
     } 
     return null; 
    } 
} 

Удачи вам!

+1

Btw Я нашел это в Руководстве по разработке расширений Safari: http://developer.apple.com/library/safari/#documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html –

+0

Спасибо, это полезно знать. Я предполагаю, что этот метод также будет извлекать файлы cookie любого документа из расширения панели инструментов (который загружает HTML, который включает в себя элементы и AJAX, где заголовок ответа загруженных элементов страницы и XmlHttpRequest могут содержать Set-Cookie для cookie сеанса). К сожалению, не похоже, что Safari позволяет отправлять заголовок cookie с помощью XmlHttpRequest для расширений панели инструментов. – David

+0

Зависит от того, где вы делаете этот запрос. Из XHR вы делаете XHR из вложенного скрипта, он разрешает XHR только в этом домене (где находится внедренный скрипт). Но если я правильно помню из global.html, вы можете отправлять запросы на любой ресурс. Скорее всего, потому, что я создавал закладок в то время, которые должны были отправить текущую страницу HREF на внешний сервер с любой страницы. –