2013-06-25 3 views
2

У меня есть расширение, которое я пишу, и я пытаюсь выполнить скрипт, когда пользователь нажимает на значок pageAction. Когда нажимается значок, метод вызывает chrome.tabs.executeScript (...). Проблема в том, что функция chrome.tabs.executeScript не выполняется, и я не могу сказать почему. Я знаю, что я добираюсь до кода, где он вызывает executeScript, потому что у меня есть предупреждение, которое появляется. Вот некоторые из моего кода:Хром функция executeScript не работает

manifest.json

{ 
    "manifest_version": 2, 
    "name": "name here", 
    "description": "description here", 
    "version": "0.1", 
    "permissions": [ 
    "<all_urls>", 
    "tabs" 
    ], 
    "icons": { 
    "16" : "images/icon16.png", 
    "48" : "images/icon48.png", 
    "128": "images/icon128.png" 
    }, 
    "background": { 
    "scripts": ["js/check.js"] 
    }, 
    "page_action": { 
    "default_icon": { 
     "19": "images/icon19.png", 
     "38": "images/icon38.png" 
    }, 
    "default_title": "default title here" 
    } 
} 

Js/check.js

chrome.tabs.onUpdated.addListener(checkForValidUrl); 

function checkForValidUrl(tabId, changeInfo, tab) { 
    if (tab.url.indexOf('g') > -1) { 
    chrome.pageAction.show(tabId); 
    } 
}; 

chrome.pageAction.onClicked.addListener(function(tab) { 
    alert("hello world"); //this code is executed... 

    //...this code is not 
    chrome.tabs.executeScript(tab.id, {file: "save.js"}, function() { 
    if(chrome.runtime.lastError) { 
     console.error(chrome.runtime.lastError.message); 
    } 
    }); 
}); 

JS/save.js

alert("hello world"); 

Как я уже сказал в коде, мир привет в моей функции pageAction onClick работает. Метод executeScript этого не делает. Любая идея о том, что происходит, была бы полезна.

+0

Кроме того, код 'console.error (...)', который должен запускаться после возврата метода 'executeScript (...)', никогда не вызывается, поэтому мне это не помогло. – mottese

ответ

2

После беспорядка с множеством разных вещей в моем коде, я нашел решение своей проблемы. Ошибка, похоже, находится в строке, которая говорит {file: "save.js"}. Когда он ищет save.js, он, по-видимому, находится в верхней директории, где находится мой файл manifest.json, а не в каталоге, в котором находится мой код. Мне пришлось изменить свой код на {file: "js/save.js"}, чтобы файл моего save.js был найден.

2

По the docs:

Чтобы вставить код в страницу, ваш добавочный номер должен иметь cross-origin permissions для страницы. Он также должен иметь возможность использовать модуль chrome.tabs. Вы можете получить оба вида разрешений, используя поле файла файла манифеста.

Для этого вам нужно разрешение для сайта, то есть http://example.com/ в поле разрешения.

+0

Я добавил '' разрешение манифесту только до тех пор, пока проблема не решена, но я все равно ничего не получаю. Отсутствует ответ кода или ошибка. – mottese

+1

@mottese есть файл существует? Он содержит ошибки? Любая ошибка в консоли разработчика? –

+1

Файл существует, все, что он содержит, это 'alert (" hello world ");' который не содержит ошибок, а консоль разработчика ничего не показывает, хотя я явно написал код, чтобы печатать ошибку. – mottese