2017-02-16 9 views
0

Я разрабатываю расширение хром. У меня есть требование, которое создает новую вкладку с некоторыми параметрами, такими как функция «окна» javascript.Как создать хромированную вкладку для разработки расширения Chrome, например window.location?

По умолчанию функция окна javascript, мне нужно установить этот код ниже, а затем window.location.replace разрешить доступ к странице в новом окне.

window.name = JSON.stringify({ 
    id : 'tmp', 
    companyCode : companyCode, 
    locationCode : locationCode, 
    terminalNo : terminalNo, 
    terminalKey : terminalKey, 

    server:{ 
     protocol : protocol, 
     remoteHost : remoteHost, 
     remotePort : remotePort, 

     clientHost : clientHost, 
     localPort : clientPort, 
     webContext : null, 

     gcRemoteHost : remoteHost, 
     gcRemotePort : remotePort, 

     soaPort: 9091, 
     webSocketPort : 9099, 
    } 
}); 

Теперь я использую google chrome api для создания вкладки.

chrome.tabs.create({ 
    url: new_location 
}); 

Итак, у меня есть вопрос, как я должен пройти над window.name, чтобы создать новую вкладку, что я могу получить доступ к новому месту.

+0

New_location является веб-url, ему нужно получить именно значение window.name, прежде чем разрешить мне доступ к веб-сайту. Возможно ли смоделировать window.name при создании вкладки chrome. – tommychoo

+0

См. Также [Передача параметра сценарию содержимого, введенному с помощью chrome.tabs.executeScript()] (// stackoverflow.com/q/17567624) – Makyen

ответ

1

Внесите код сценария содержимого, который устанавливает имя.

  1. разрешения на URL (лучше) или "<all_urls>" (хуже, но иногда неизбежно) в manifest.json:

    "permissions": ["http://www.example.com/*"], 
    
  2. Поместите имя в переменную:

    var windowName = JSON.stringify({ 
        foo: 'bar', 
    }); 
    
  3. Используйте chrome.tabs.executeScript в фоновом/всплывающем/опционном скрипте для запуска кода сценария содержимого в виде строки со встроенным именем окна в качестве параметра во вновь созданной вкладке:

    chrome.tabs.create({ 
        url: 'http://www.example.com' 
    }, function(tab) { 
        runContentCode(tab.id, injectedSetWindowName, windowName); 
    }); 
    
    function injectedSetWindowName(name) { 
        window.name = name; 
    } 
    
    function runContentCode(tabId, fn, params) { 
        chrome.tabs.executeScript(tabId, { 
         code: '(' + fn + ')(' + JSON.stringify(params) + ')', 
         runAt: 'document_start', 
        }); 
    } 
    

В случае, если у вас уже есть автоматически выполняется скрипт контента (например, объявленный в manifest.json), используйте messaging (chrome.tabs. sendMessage), чтобы отправить имя окна и установить его соответствующим образом.

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