Userscript не закроет окно, если оно не активно

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Я новичок в StackOverflow и userscripts, и я пытаюсь начать все сначала!

Помимо бесполезной информации, у меня возникли небольшие проблемы с крошечным скриптом, который я недавно создал.

 (function () {

  $("#enbut").click();

  setTimeout(function () {
    open(location, '_self');
    window.close();
  }, 100);

})();
 

Что он делает, так это нажимает кнопку, ждет секунду, пока веб-сайт зарегистрирует, что я нажал на нее, а затем закрывает веб-страницу.

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

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

Есть ли какая-либо причина, по которой это может произойти, или какой-либо способ это исправить?

Я использую Chrome, так что, может быть, это просто функция безопасности браузера, подобная тому, что они сделали с закрытием окон?

Комментарии:

1. Я думаю, что это вопрос безопасности, я поиграл с вашим скриптом и получил это сообщение в своей консоли: Scripts may close only the windows that were opened by it. (и если вы щелкните правой кнопкой мыши, это, вероятно, не так). Если вы объясните, что стоит за вашим сценарием, мы могли бы предложить другой способ.

2. Спасибо за ответ, и да, похоже, что это связано с проблемой безопасности в Chrome. Я смог решить эту проблему, настроив его как расширение Chrome, что дает ему более высокие привилегии и возможность закрывать Windows по своему усмотрению. Спасибо за идею, это помогло!

3. Не могли бы вы рассказать нам в ответе, каково решение?

4. @Huntereb опубликуйте ответ, чтобы он мог кому-то помочь..

5. Вы также можете принять ответ, чтобы он был официально «решен».

Ответ №1:

window.close(); создает проблему безопасности при использовании в качестве обычного пользовательского скрипта в современных браузерах. Даже при использовании обхода ( open(location, '_self'); ), похоже, он не разрешает его на вкладках, которые не являются активным окном.

Чтобы решить эту проблему, мне пришлось преобразовать userscript в расширение Chrome, что дает скрипту полный контроль над мерами безопасности Chrome. Я не думаю, что был бы какой-либо другой способ заставить это работать как обычный пользовательский скрипт, не вмешиваясь во внутренние компоненты Chrome, что было бы глупо делать для простого скрипта.

Спасибо за помощь, ребята!

Комментарии:

1. Через некоторое время система позволит вам принять ваш собственный ответ. Это лучший способ сделать что-то «решаемым» здесь, при переполнении стека.