Закрытие окон с помощью Greasemonkey - PullRequest
1 голос
/ 15 декабря 2010

Я писал скрипт Greasemonkey для Chrome (перетаскивает как расширение) для использования с Facebook. Я знаю, что Greasemonkey находится в «песочнице» и что, по крайней мере, в Firefox вы не можете закрыть окна скриптами, если не измените настройку в браузере. Тем не менее, я знаю, что большинство браузеров разрешают закрывать дочерние окна родительским окном без подтверждения пользователя. В любом случае я пытаюсь заставить свой скрипт открыть окно, получить фрагмент текста из объекта HTML и закрыть окно нажатием кнопки на странице.

Мой код для открытия окна выглядит так:

function birthday(linkAddress) {
var winNew=window.open(linkAddress, "_blank", "height=100", "width=100");
/*code to be run on page*/
    winNew.close()
}

Окно открывается нормально, но я получаю ошибку javascript в Chrome, говорящую «не могу вызвать метод close из undefined». Я предполагаю, что что-то не так с моим объектом, связанным с песочницей Greasemonkey, но я не знаю, что именно. Можно ли даже закрыть окно с помощью скрипта Greasemonkey в Chrome? Есть ли какие-то настройки, которые мне нужно включить? Или мой код просто неверен? Имейте в виду, что этот код выполняется из функции на странице главного окна, которую я установил равной функции в моем скрипте, используя событие onClick кнопки, которую я написал на страницу. Также приветствуются любые советы по доступу к элементам DOM на дочерней странице.

Спасибо за любую помощь!

(Извините, я совсем новичок в программировании, но я впервые написал скрипт Greasemonkey)

1 Ответ

1 голос
/ 16 декабря 2010

Фрагмент размещенного кода неадекватен и не соответствует заявленной операции «закрыть окно нажатием кнопки на странице».

Так что наилучшее предположение состоит в том, что либо функция закрытияза пределами birthday() (где определено winNew) или что-то в непоказанном коде вызывает проблему.

Еще одно предостережение: вам нужно знать, что скрипт Greasemonkey может также запускаться в дочернем окнев зависимости от того, указан ли / какой URL при открытии дочернего окна.

Вот пример кода, который открывает и закрывает дочернее окно при нажатии кнопок:
Смотрите его в действии на jsfiddle.

<html>
<head>
<script type="text/javascript">
    var chldWnd;

    function OpenChldWin ()
    {
        //chldWnd = window.open ("http://www.google.com");
        chldWnd = window.open ('','','height=200, width=200');
        chldWnd.document.write ('<p>My New Window</p>');    //-- Don't do if opening a URL in new window.
        chldWnd.focus();
    }

    function CloseChldWin ()
    {
        if (chldWnd.closed)
            alert ('Child window was already closed.');
        else
        {
            chldWnd.close ();
            alert ('Child window is NOW closed.');
        }
    }
</script>
</head>
<body>
<input type="button" value="Open Child Window"      onclick="OpenChldWin ()">
<input type="button" value="Close the Child Window" onclick="CloseChldWin ()">
</body>
</html>
...