Создайте новую вкладку / окно Chrome из Iframe - PullRequest
3 голосов
/ 25 февраля 2011

У меня сейчас есть проблема с iframe ...

У меня есть iframe с окном поиска, и я хочу сделать это перенаправление окна поиска, когда я нажимаю на go, создавая новую вкладку / окно

http://img51.imageshack.us/i/issuec.png/

Итак, чтобы быть понятным, мой вызов расширения Google Chrome в качестве скрипта содержимого: overlay.js Затем этот файл поместит в конец текущей страницы мой "overlay.html"стр.

Таким образом, проблема в том, что мой .html представлен в виде iframe, и я не вижу, как я могу перенаправить из этого iframe.1014 * overlay.js

var overlay= {
    init: function() {
        this.injectoverlay();
        //alert('Initialisation reussie');
    },

    injectoverlay: function() {
        var body = $('body'),
            overlayURL = chrome.extension.getURL("overlay.html"),
            iframe = $('<iframe id="YouroverlayFrame" src="'+overlayURL+'">');

            body.append(iframe);
            iframe.show();

        //alert('Injection reussie');
    }
}

Tool.js

function searchBoxRedirection(form)
{
    tabs.create({url:"www.yahoo.fr"});
}

manifest.json

{   

    "background_page" : "background.html",
    "browser_action" :
    {
        "default_icon" : "images/Extension.png"
    },
    "content_scripts": 
    [ {
      "all_frames": true,
      "css": ["css/overlay.css"],
      "js": ["js/overlay.js"],
      "matches": ["http://*/*"],
      "run_at": "document_start"
    } ], 
    "permissions" : ["tabs", "unlimitedStorage", "http://*/*"], 
    "name" : "MyOverlay",
    "version" : "1.1",
    "description" : "Sindar Overlay"
}

Ответы [ 2 ]

4 голосов
/ 26 февраля 2011

Поскольку вы используете Content-Scripts , вы не можете вызывать любой API Chrome, кроме нескольких chrome.extensions. *

Вот несколько примеров того, что могут делать скрипты содержимого:

Документация Цитата

Поиск несвязанных URL-адресов на веб-страницах и преобразование их в гиперссылки '

  • Увеличение размера шрифта, чтобы сделать текст более разборчивым
  • Найтии обрабатывать данные микроформатов в DOM

Однако скрипты содержимого имеют некоторые ограничения.Они не могут:

  • Использовать Chrome. * API-интерфейсы (кроме частей chrome.extension)
  • Использовать переменные или функции, определенные на страницах их расширений
  • Использовать переменные илифункции, определенные веб-страницами или другими скриптами содержимого
  • Создание межсайтового XMLHttpRequests

Теперь, чтобы сделать то, что вы хотите, вам нужно перейти по ссылке, у вас есть дваварианты:

  1. Используйте Сообщения для перенаправления страницы.
  2. Вызовите «parent» внутри iframe, чтобы выполнить перенаправление.

Подход к обмену сообщениями

Обмен сообщениями прост, все, что вам нужно сделать, это отправить запрос на добавочный номер, который откроет chrome.tabs.create новую страницу.

contentscript.js

chrome.extension.sendRequest({visit: "http://yahoo.fr"});

background.html

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  if (request.visit) {
    chrome.tabs.create({url: request.visit});
  }
  sendRepsonse({}); // Snub
});

Родительский подход

Внедрение скрипта содержимого:

<iframe src='iframe.html'></iframe>
<script type="text/javascript">
   function changeURL(url) {
 document.location=url;
   }        
</script>

IFrame содержит:

 <a href="javascript:parent.changeURL('http://yahoo.fr');">Change to Yahoo</a>
0 голосов
/ 02 марта 2017

Я пытаюсь сделать то же самое, но, к сожалению, не знаю, куда поместить приведенный ниже код

Родительский подход

Content Script injects:

<iframe src='iframe.html'></iframe>
<script type="text/javascript">
   function changeURL(url) {
 document.location=url;
   }        
</script>
IFrame contains:

 <a href="javascript:parent.changeURL('http://yahoo.fr');">Change to Yahoo</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...