2016-05-03 5 views
0

Я пытаюсь разработать расширение Chrome, чтобы открыть новую вкладку при нажатии кнопки, а затем выполнить js в ней.Ошибка при вводе сценария

манифеста:

{ 
    "author": "...", 
    "name": "...", 
    "manifest_version": 2, 
    "version": "1.0", 
    "description": "...", 
    "background": {}, 
    "browser_action": { 
    "default_popup": "popup.html" 
    }, 
    "permissions": [ 
    "tabs","http://*/","https://*/" 
    ] 
} 

popup.html:

<html> 
<head> 
    <script src="jquery.min.js"></script> 
</head> 
<body> 
    <button type="button" id="saveBtn">Save</button> 
    <script type="text/javascript" src="popup.js"></script> 
</body> 
</html> 

popup.js:

$("#saveBtn").click(function(){ 
    chrome.tabs.create({ 
    selected:false, 
    url:'https://analytics.google.com/something...' 
    },function(tab){ 
    chrome.tabs.executeScript(tab.ib,{file:"jquery.min.js"}); 
    chrome.tabs.executeScript(tab.ib,{file:"html2canvas.js"}); 
    chrome.tabs.executeScript(tab.ib,{file:"FileSaver.js"}); 
    chrome.tabs.executeScript(tab.id,{file:'inject.js'}); 
    }); 
}); 

Все Javascript Fil es находятся в одной папке. Я получаю эту ошибку

Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome:// URL at Object.callback (chrome-extension://jamfjopkccgnbpkhafanifhjambepphc/popup.js:8:23) 

на линиях, где я пытаюсь привнести jquery.min.js, html2canvas.js и FileSaver.js НО НЕ inject.js! Новая вкладка открывается правильно, выполняется обратный вызов, но затем возникает ошибка. Что я здесь делаю неправильно?

+0

Просто так, что мы понятны, ваш URL правильный, а не 'https: //analytics.google.com/something ...'? Потому что похоже, что вы пытаетесь нажать на 'chrome: //' URL: что вы не можете сделать. – Pogrindis

+0

Также я должен направить вас сюда: http://stackoverflow.com/questions/24600495/chrome-tabs-executescript-cannot-access-a-chrome-url – Pogrindis

ответ

2

У вас есть опечатка.

chrome.tabs.executeScript(tab.ib,{file:"jquery.min.js"}); 
chrome.tabs.executeScript(tab.ib,{file:"html2canvas.js"}); 
chrome.tabs.executeScript(tab.ib,{file:"FileSaver.js"}); 
chrome.tabs.executeScript(tab.id,{file:'inject.js'}); 

Первые три имеют tab.ib вместо tab.id, который будет проходить undefined. В этом случае Chrome попытается запустить скрипт на текущей вкладке, которая, вероятно, chrome://extensions или что-то в этом роде.

Из документов:

целым числом (по желанию) табетический
Идентификатор вкладки, в которой для выполнения сценария; по умолчанию активна вкладка текущего окна.

Кстати, вы можете взглянуть на this question, чтобы убедиться, что ваши скрипты выполнены в правильном порядке.

+0

Да! Я бы никогда не заметил, что ib: D – cdm

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