2013-11-19 4 views
0

Я пытаюсь открыть обычную вкладку браузера из моего приложения Chrome. Я хочу, чтобы вкладка открылась, не нужно общаться между ними. До сих пор я пробовал следующие два метода, которые создают и загружают новую вкладку.Откройте вкладку браузера с chrome-app, с доступом к localStorage

var a = document.createElement('a') 
a.href = "https://example.com"; 
a.target = "_blank"; 
a.click(); 

var w = window.open(s.Url, "_blank"); 
w.focus(); 

Еще одна попытка, которая приводит к тому же. Этот файл жестко закодирован в html и активируется нажатием на него пользователя. Таким образом, проблема не связана с самим javascript, а тем, как хром обрабатывает внешние ссылки.

<a href="https://example.com/" target="_blank">Open external website</a> 

Однако в этих созданных вкладках localStorage имеет значение NULL. Очевидно, что вкладка по-прежнему открыта в среде приложения. Если я копирую URL-адрес и вставляю его в новую вкладку, то доступна локальная хранилища.

Как открыть новую вкладку браузера, аналогичную пользовательской копии/вставке URL-адреса.

UPDATE Приложение было запущено с использованием window.open со справочной страницы, чтобы создать вкладку, а не новое окно. Если используется chrome.app.window.create, ссылки открываются корректно в браузере с доступным локальным хранилищем.

ответ

1

Судя по симптомам, вы делаете это со страницы фона (событий). window.open() в настоящее время очень плохо работает при вызове со справочной страницы. Для этого есть bug и proposal для API, целью которого является его устранение. Вот что вы можете сделать в то же время:

  1. В вашем решении с document.createElement («а»), вы создаете свой элемент в неверном документе («неправильный» в свете ошибки выше). Это документ окна фоновой страницы, и вы должны использовать одно из окна содержимого. Изменение способа вы создаете элемент для:

    var a = win.contentWindow.document.createElement('a');

    где win является объект окна приложения возвращается в обратном вызове chrome.app.window.create. Это должно сработать.

  2. Вы не можете ничего сделать, чтобы исправить window.open() на исходной странице, но см. # 3 ниже.

  3. С другой стороны, если это возможно в вашем случае, вы можете переместить любого из ваших 2 решений без изменений в скрипт вызывается из вашего .html:

main.html

<html> 
    <body> 
    ... 
    <script src="main.js"></script> 
    </body> 
</html> 

main.js

function SomeEventHandler() { 
    // This... 
    var a = document.createElement('a') 
    a.href = "https://example.com"; 
    a.target = "_blank"; 
    a.click(); 

    // ... or this will both work. 
    window.open("https://example.com"); 
} 
+0

Это не справочная страница, а видимость e chrome-app tab, которая каким-то образом изолирована. Предыдущие примеры кода не выполнялись в chrome.app.window, а на вкладке, созданной с помощью window.open со справочной страницы. – hultqvist

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