Вызовите Chrome.extension.sendRequest из динамически вставленного js? - PullRequest
0 голосов
/ 07 марта 2011

В настоящее время я пытаюсь динамически вставить блок JS на веб-страницу с помощью jQuery, но это не сработало. Я попробовал это:

var body = $('body');

var injectJs = $('<script type=text/javascript>' +
'$(document).click(function() {' +
    'dropMenu("dropMenu1", 0);' +
'});');

body.append(injectJs); 

РЕДАКТИРОВАТЬ: 16: 26

Мне удалось вставить код следующим образом:

/* Importation de Tool.js */
var scriptImport = document.createElement('script');
scriptImport.type = 'text/javascript';
scriptImport.src= chrome.extension.getURL('js/Tool.js');
head.appendChild(scriptImport);

/* Injection du script onClick */                   
var script = document.createElement('script');
script.type = 'text/javascript';

script.innerHTML = "document.addEventListener('click', function(){ dropMenu('slideUp', 0); alert('TRY ME AGAIN'); });";

И dropMenu:

function dropMenu(dropMenuPage, marginLeft)
{
    var msg = "";
    msg = msg.concat(dropMenuPage, "|", marginLeft);

    chrome.extension.sendRequest({dropMenu : msg});
    alert('After send');
}

Проблема в том, что sendRequest невозможен с этой страницы ... У кого-то есть идея?

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 07 марта 2011

Вам нужно закрытие </script> в конце там ...

0 голосов
/ 07 марта 2011

Почему бы не использовать для этого скрипты содержимого?Внедрение скрипта непосредственно на страницу требуется только в том случае, если вам нужен доступ к переменным js со страницы.Для вашего dropMenu() должно быть достаточно скрипта контента.

Вы не можете использовать Chrome API внутри внедренного js.Вам также необходимо внедрить сценарий содержимого, и с помощью пользовательских событий DOM вы сможете общаться с ним из введенного сценария.Затем этот контент-скрипт сможет вызывать Chrome API и взаимодействовать с фоновой страницей.Звучит как боль для меня.Я бы посоветовал вам пойти по этому пути, только если нет других возможных путей.

0 голосов
/ 07 марта 2011
// Importation of jQuery.js 
var scriptImport = document.createElement('script');
scriptImport.type = 'text/javascript';
scriptImport.src= chrome.extension.getURL('js/jquery.js');
head.appendChild(scriptImport);

// Injection of onClick script                  
var script = document.createElement('script');
script.type = 'text/javascript';

script.innerHTML = 
"document.addEventListener('click', function()" + 
    "{ if(document.getElementById('dropMenu')) {" +
        "$('#dropMenu').slideUp(800, function() {" +
           "$(this).remove();" +
    "});" +
                                                        "}});"; 

Я наконец-то сделал это, все работает :) 1002 *

0 голосов
/ 07 марта 2011

Используйте функцию eval, например:

var body = $('body');
var injectJs = eval("$(document).click(function() {alert('hello')})");
body.append(injectJs); 
0 голосов
/ 07 марта 2011

Я думаю, что твой сценарий не закрыт

var b= $('body');

var injectJs = $('<script type=text/javascript> $(document).click(function() {alert("yes");});</script>');

b.append(injectJs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...