2015-05-22 4 views
0

Я пытаюсь написать сценарий tampermonkey, который собирает document.location и заголовки в словаре. Погуглил немного, и решил, что я должен использовать какую-то глобальную переменную, но она не работает так, как я хочу.Получить заголовки всех запросов, связанных со страницей с tampermonkey

Вот сценарий:

// ==UserScript== 
// @name   My Fancy New Userscript 
// @namespace http://your.homepage/ 
// @version  0.1 
// @description enter something useful 
// @author  You 
// @match  *://*/* 
// @grant  none 
// ==/UserScript== 


if (unsafeWindow.resources == undefined) { 
    var unsafeWindow.resources = []; 
} 

var host = window.location; 
unsafeWindow.resources.push(host); 
console.log(unsafeWindow.resources); 

При запуске он, я получаю следующее сообщение об ошибке:

ERROR: Execution of script 'My Fancy New Userscript' failed! unsafeWindow is not defined

Может быть, то, что я пытаюсь сделать, это не возможно?

Обновление: Попытка быть немного понятнее. Конечный результат должен привести к тому, что словарь будет иметь ключ document.location и словарь, содержащий имя заголовка и значение заголовка указанного местоположения в качестве значения.

{document.location = {"Headername" = "Header value", "Headername" = "Header value"}} 

Конечный результат будет использоваться для создания таблицы с информацией в словаре. Что-то вроде этого:

enter image description here

/Patrik

+1

unsafeWindow.resources будет никогда не работайте до тех пор, пока он не определен где-нибудь (вам нужно определить хотя бы небезопасное окно). Кроме того, можете ли вы прояснить, что вы имеете в виду под «Словарем»? вам нужно хранить их локально или что? – briosheje

+0

Обновлено. Спасибо за комментарий! – PatrikJ

+1

Я все еще не понимаю, чего вы точно хотите достичь, чтобы быть яснее: большой вопрос: вам нужно ХРАНИТЬ эту информацию, хранящуюся или ...? В двух словах, вы пытаетесь извлечь каждый ресурс, загруженный DOM, и сохранить его в объекте для последующей печати таблицы, это то, что вы хотите сделать? В любом случае имейте в виду, что использование unsafeWindow может открыть некоторые дыры в безопасности для вашего пользовательского скрипта, посмотрите на это в первую очередь: https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/ Interacting_with_page_scripts – briosheje

ответ

1

Пожалуйста, примите это как краткий пример того, что вы должны выполнить, и быть в курсе, что вы можете столкнуться с некоторыми проблемами при движении по вашему проекту, потому что иногда document.location может быть немного сложным для извлечения.

Это обособленно, код:

// ==UserScript== 
// @name  My Fancy New Userscript 
// @namespace http://use.i.E.your.homepage/ 
// @version 0.1 
// @description enter something useful 
// @match  *://*/* 
// @copyright 2015+, You 
// ==/UserScript== 

var storage = (function(win){ 
    var localDrive = win.localStorage; 

    return { 
     save: function (/* <string> */ key, /* <string | JSONstringified object> */ value) { 
      localDrive.setItem(key, value); 
     }, 
     destroy: function (/* <string> */ key) { 
      return localDrive.removeItem(key) ? true : false; 
     }, 
     get: function (/* <string> */ key) { 
      return localDrive.getItem(key) == '' || localDrive.getItem(key) == null ? false : localDrive.getItem(key); 
     } 
    } 
})(window); 

window.storage = storage; 

document.addEventListener("DOMContentLoaded", function(e) { 
    // Dom ready, start: 

    // Check whether the array exists or not : 
    if (!storage.get("myDataList")) { 
     storage.save("myDataList", JSON.stringify(
         [{ 
          'href'  :  document.location.href, 
          'location' :  document.location, 
          'test1' :  'test', 
          'test2' :  'test2' 
         }] 
        ) 
        ); 
    } 
    else { 
     // If exists, log every single object: 
     var currentStorageList = JSON.parse(storage.get("myDataList")); 
     for (var i = 0; i < currentStorageList.length; ++i) { 
      console.log(currentStorageList[i]); 
     } 
    } 

    // Check whether this element exists in the current list, else add : 

    var currentStorageList = JSON.parse(storage.get("myDataList")); 

    var elementExists = currentStorageList.some(function(el,i,arr) { 
     return el.href === document.location.href; 
    }); 

    if (!elementExists) { 
     console.log("current elements doesn't exist, let's push it!"); 
     storage.save("myDataList", JSON.stringify(JSON.parse(storage.get("myDataList")).push({ 
          'href'  :  document.location.href, 
          'location' :  document.location, 
          'test1' :  'test', 
          'test2' :  'test2' 
         }))); 
    } 
}); 

Это чистый JavaScript, так как я не видел вас с помощью JQuery.

Я усмотрел там:

  1. Удобный объект DOM (хранение) с тремя основными способами: сохранить (хранит ключ => значение, где значение должно быть строкой или JSON строковой элемент, потому что вы можете 't хранить массивы в локальном хранилище), получить (получить от ключа) и уничтожить (из ключа).
  2. Конструктор прямо в начале domready: если ключ, содержащий элементы, НЕ существует, он создаст его и заполнит текущим местоположением документа, идентифицируя его с помощью href документа.
  3. Несколько примеров для работы с целью сохранения/получения того, что вам нужно.

Обратите внимание, что это всего лишь пример (он действительно работает).

Кроме того, в настройках сценария tampermonkey не забудьте установить его на document-end.

Выход на XKCD (для тестирования) заключается в следующем:

enter image description here

http://prntscr.com/784zw7 (картинка прямой ссылка)

Надеется, что это полезно для вашего проекта;)

+0

В большинстве случаев вы получаете помощь здесь в stackoverflow. Большинство - здорово. Но тогда есть люди, которые идут выше и дальше. Ты потрясающий чувак. Это путь перед сном для меня, но я дам ему завтрашний день. Бесконечно благодарен! – PatrikJ

+0

И, конечно, отчитаться. :) – PatrikJ

+0

@PatrikJ: приветствую вас, я надеюсь, что это будет полезно для вас и того, кому это понадобится в будущем;) – briosheje

Смежные вопросы