2015-10-13 2 views
0

Есть ли способ узнать, успешно ли был введен сценарий содержимого. Я знаю, что мы можем использовать передачу сообщений. Но есть ли способ, кроме этого?Расширение Chrome - узнать, был ли введен сценарий содержимого?

+0

Вы вводите его 'executeScript'? – wOxxOm

+0

Вы имеете в виду на реальной странице, а не на фоновом приложении? – jstuartmilne

+0

Да, используя executescript ... –

ответ

2

Я думаю, что самый простой способ будет использовать дополнительный обратный вызов executeScript. Завершите свой скрипт содержимого с помощью 'success'; в отдельной строке. Тогда ваш запрос на инъекцию будет следующим:

chrome.tabs.executeScript(tabId, details, successStatus); 
function successStatus(frameResults) { 
    if (frameResults[0] === 'success') { 
    // successfully injected 
    } 
} 
+0

, что вы подразумеваете, добавив 'success' , –

+0

'frameResults' - это массив, в котором каждый элемент массива является последним оцененным выражением в скрипте содержимого в кадре. Поэтому вы хотите, чтобы ваш контент-скрипт заканчивался выражением, которое указывает, что оно успешно загружено. В этом случае вы можете просто написать ''success';' в своей собственной строке. Chrome будет оценивать это выражение, и это будет запись в массиве результатов. – Teepeemm

+0

Я добавил так же, как и сказал ... но получаю нуль –

0

Итак, скажите, что мы говорим о фактической странице, а не о расширении фона.

Сначала вы должны включить scrits на странице, вот как им делать это

var j = document.createElement('script'); 
j.src = chrome.extension.getURL('bower_components/jquery/dist/jquery.min.js'); 
(document.head || document.documentElement).appendChild(j); 

var k = document.createElement('script'); 
k.src = chrome.extension.getURL('bower_components/jquery-ui/jquery-ui.min.js'); 
(document.head || document.documentElement).appendChild(k); 

, а затем проверить, если он был загружен у меня есть Условный условие

if((/in/.test(document.readyState)) || (undefined === Backbone)) { 
    setTimeout('refresh(' + f + ')', 10); 
    } else { 
    f(); 
    console.log("Loaded Main Application"); 

Так я спросите, готово ли состояние, а затем проверьте, загружен ли браузер jj.

Надеется, что это помогает

+0

OP использует executeScript на странице background/event, поэтому он вводит иначе, чем вы. (И не используйте форму eval 'setTimeout'. В этом случае вы должны использовать' refresh.bind (undefined, f) '.) – Teepeemm

+0

Поблагодарите u, плохо сделайте это – jstuartmilne

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