2016-01-07 6 views
0

Я пишу расширение 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, и это привело к еще худшим результатам с точки зрения запуска предупреждения.

+0

ли вы имеете в виду вы обновили основную страницу, когда всплывающее окно уже было открыто? Проверьте аргумент [strWindowName] (https://developer.mozilla.org/en-US/docs/Web/API/Window/open) и обратите внимание, что он должен меняться каждый раз, когда вы открываете окно, чтобы действительно открыть новый окно. – Teemu

+0

Я обновляю страницу для повторного запуска всего кода. В сценарии, где все работает, я не освежаю. Я использую window.open() только с URL-адресом, с целью создания новой вкладки/окна, которая работает нормально. Я не понимаю, где strWindowName приходит к этому. –

+0

"с целью создания новой вкладки/окна" Открытие окна без имени фактически разрушает вашу цель. Без разного имени открытое окно еще не открывается, оно просто сфокусировано, поэтому похоже, что 'ready()' стрелял случайным образом. – Teemu

ответ

0

Я не знаю, что это решение, но это должно работать

var raw_title = document.getElementsByClassName("question-hyperlink")[0]; 

var kickass = window.open("https://kickass.unblocked.pe/"); 
var firstload= "false"; 
localStorage.setItem("someVarName", someVarName) 
$(kickass.document).ready(function() { 
var someVarName = localStorage.getItem("someVarName"); 
if(someVarName=="false") 
{ 
    kickass.alert("hello"); 
    var s = kickass.document.getElementById("contentSearch"); 
    alert(s); 
} 
else 
{ 
//page is not loading first time do the stuff you want to 
} 
}); 

Read Localstorage here

Если вы хотите удалить, что из LocalStorage просто называют как этот

var someVarName = localStorage.removeItem(getItem("someVarName")) 
+0

Нет успеха на этом ... –

+0

вы можете показать свой код? –

+0

Я скопировал вам лишние строки дословно. Используя имя 'someVarName' и ничего не делая в блоке else. Однако представляется, что 'ready()' действительно работает - если я делаю 'alert (« hello »), то я всегда получаю ответ. Объект kickass, по-видимому, вызывает проблемы. (См. Мой ответ на комментарий Teemu выше.) –

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