Я пишу расширение Chrome. Я пытаюсь заставить свой скрипт открыть новую вкладку и ввести текст в поиск, но у меня возникают проблемы с синхронизацией. Вот мой код:Функция jquery .ready непредсказуема
HelloWorld.html:
<html>
<h1 id="test"></h1>
<head>
<script src="navigate.js"></script>
</head>
</html>
manifest.json
{
"name": "Sonic",
"version": "0.1",
"manifest_version": 2,
"description": "My first Chrome extension.",
"permissions": [ "tabs" ],
"browser_action": {
"default_icon": "Sonic_Sprite.png",
"default_popup": "helloworld.html"
},
"content_scripts": [
{
"matches": ["http://stackoverflow.com/questions/*/*"],
"js": ["jquery-1.11.3.js", "content.js"]
}
]
}
content.js
var raw_title = document.getElementsByClassName("question-hyperlink")[0];
var kickass = window.open("https://kickass.unblocked.pe/");
$(kickass.document).ready(function() {
kickass.alert("hello");
var s = kickass.document.getElementById("contentSearch");
alert(s);
});
Я получаю непредсказуемое поведение от функции jQuery ready()
. Возможно, 20% времени, когда я загружаю страницу, дает мне предупреждение.
Это распространенная ошибка, и если да, то что можно сделать, чтобы исправить ее? Я играл с onload
, прежде чем перейти к jquery, и это привело к еще худшим результатам с точки зрения запуска предупреждения.
ли вы имеете в виду вы обновили основную страницу, когда всплывающее окно уже было открыто? Проверьте аргумент [strWindowName] (https://developer.mozilla.org/en-US/docs/Web/API/Window/open) и обратите внимание, что он должен меняться каждый раз, когда вы открываете окно, чтобы действительно открыть новый окно. – Teemu
Я обновляю страницу для повторного запуска всего кода. В сценарии, где все работает, я не освежаю. Я использую window.open() только с URL-адресом, с целью создания новой вкладки/окна, которая работает нормально. Я не понимаю, где strWindowName приходит к этому. –
"с целью создания новой вкладки/окна" Открытие окна без имени фактически разрушает вашу цель. Без разного имени открытое окно еще не открывается, оно просто сфокусировано, поэтому похоже, что 'ready()' стрелял случайным образом. – Teemu