Я разрабатываю расширение Chrome для работы, и одна из вещей, которую ему нужно сделать, это прочитать (только читать, а не изменять) объект, который мы отправляем обратно на веб-сайт после того, как он делает асинхронный запрос на наших серверах. В основном мне нужно прочитать объект window.<our object name>
и получить то, что там.Как получить доступ ко всем объектам Windows из расширения Chrome?
Теперь я знаю, что это возможно, потому что я сделал это в сценарии Tampermonkey, который я написал. Я был в состоянии console.log(window.<our object name>)
, и он вошел.
Tampermonkey - это расширение Chrome, поэтому нет причин, по которым он может получить доступ к чему-то, а другое расширение не может.
Но когда я пытаюсь получить доступ к этому объекту, как из сценариев контента, так и из введенного кода, я ничего не получаю. Когда я получаю только объект window
, он появляется только частично, как если бы расширение было слепым к некоторым его частям. Но если я нахожусь в консоли на странице, и я звоню window
, я получаю полный объект окна обратно. Бешенство.
Так что если скрипты содержимого не работают, а вложенные скрипты не работают, и нет никаких причин, по которым всплывающие скрипты будут полезны здесь, как это сделать?
Большое спасибо!
UPDATE: В соответствии с просьбой, вот manifest.json (я взял пример page_redder и отработаны, что, чтобы убедиться, что я не делал каких-либо странные ошибки):
{
"name": "Page Redder",
"description": "Make the current page red",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_title": "get my object"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"manifest_version": 2
}
А вот содержание. ЯШ:
var getWindow = window.setTimeout(function() { console.log("From content script: " + window.<OBJECT NAME>); }, 5000);
А вот background.js:
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Called when the user clicks on the browser action.
chrome.browserAction.onClicked.addListener(function(tab) {
// No tabs or host permissions needed!
chrome.tabs.executeScript({
code: 'console.log("From injected script:" + window.<OBJECT NAME>);'
});
});
При запуске, я получаю:
Из содержания сценария не определен Из закачиваемого сценария: не определен
Но если я окно. из консоли, я понимаю. Я даже добавил тайм-аут, чтобы убедиться, что сценарий содержимого не пытается получить то, что еще не загрузилось. Но я могу получить объект вручную до запуска скрипта, и он все равно дает мне неопределенное.
Можете ли вы включить 'javascript',' manifest.json' в Вопрос? – guest271314
Да, определенно. Готово. – StormShadow
Введенные скрипты могут читать то, что вы хотите. у вас, вероятно, есть проблемы с синхронизацией. –