Расширение Safari - Изменение предопределенных значений переменных Javascript - PullRequest
2 голосов
/ 08 сентября 2011

Итак, что я пытаюсь добиться - это манипулировать переменной javascript с веб-сайта, чтобы при загрузке страницы она менялась на предварительно определенное мной значение (inmyscript.js).

В Safari'sПостроитель расширений У меня есть следующие настройки:

  • Уровень доступа: Все (чтобы убедиться, что он работает в данный момент правильно)
  • Стартовые сценарии: jquery.min.js (jquery script)
  • Конечные сценарии: myscript.js (myscript)

Start Scripts загрузит сценарий jquery, так как я хочу использовать jquery для некоторых манипуляций с DOM.Конечный скрипт - это скрипт, который содержит перезапись для переменной, которую я пытаюсь изменить в html-документе.

В настоящее время myscript.js выглядит следующим образом:

$(document).ready(function(){
    var numberImThinkingOf = 999;
});

Например, чтоЯ пытаюсь сделать: Следующая страница, печатает значение numberImThinkingOf, создавая новый элемент абзаца каждый раз, когда нажимается кнопка отправки.

Таким образом, без расширения он будет печатать

  • Значение: 5
  • Значение: 5
  • Значение: 5

При нажатии три раза.

Однако я хочу, чтобы мойРасширение Safari для изменения значения по умолчанию переменной numberImThinkingOf после загрузки всех элементов DOM на значение, указанное в myscript.js. Чтобы при нажатии кнопки подтверждения оно отображало:

  • Значение: 999

В идеале я не хочу манипулировать DOM, чтобы он вставлял другой элемент скрипта.Я изначально думал, что javascript прикрепил переменные к объекту окна.Но я думаю, что я был не прав.Событие, если у меня есть скрипт, такой как

$(document).ready(function(){
    alert(numberImThinkingOf)
});

Возвращает неопределенное.:( Любая помощь бы меня высоко оценила.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script>
    var numberImThinkingOf = 5;
    function whatNumber(){
        var newElement = document.createElement("p");
        newElement.textContent = "Value: "+numberImThinkingOf;
        document.body.insertBefore(newElement, document.body.firstChild);
    }
    </script>
</head>

<body>
<input type="submit" value="Continue &rarr;" onclick="whatNumber()" />
</body>
</html>

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Я считаю, что ваш скрипт и страница получают разные window объекты, чтобы избежать неожиданного заражения.Вот что говорится в Руководстве по разработке Safari Extensions :

Внедренные сценарии имеют подразумеваемое пространство имен - вам не нужно беспокоиться о том, что имена переменных или функций конфликтуют с именами веб-сайта.автор, также как и автор веб-сайта не может вызывать функции в вашем добавочном номере.Другими словами, внедренные сценарии и сценарии, включенные в веб-страницу, работают в изолированных мирах, без доступа к функциям или данным друг друга.

Похоже, что вам нужно присоединить эту переменную к DOM внекоторая мода, возможно, как атрибут тега.

2 голосов
/ 08 сентября 2011

Сценарии содержимого находятся в «песочнице», если вы хотите получить доступ к переменным родительской страницы, вам нужно добавить тег <script> в ваш код. Вы можете найти несколько примеров здесь .

...