相关疑难解决方法(0)

使用内容脚本将代码插入页面上下文

我正在学习如何创建Chrome扩展程序.我刚开始开发一个来捕捉YouTube活动.我想将它与YouTube Flash播放器一起使用(稍后我将尝试使其与HTML5兼容).

manifest.json的:

{
    "name": "MyExtension",
    "version": "1.0",
    "description": "Gotta catch Youtube events!",
    "permissions": ["tabs", "http://*/*"],
    "content_scripts" : [{
        "matches" : [ "www.youtube.com/*"],
        "js" : ["myScript.js"]
    }]
}
Run Code Online (Sandbox Code Playgroud)

myScript.js:

function state() { console.log("State Changed!"); }
var player = document.getElementById("movie_player");
player.addEventListener("onStateChange", "state");
console.log("Started!");
Run Code Online (Sandbox Code Playgroud)

问题是控制台给了我"开始!" ,但没有"状态改变!" 当我播放/暂停YouTube视频时.

将此代码放入控制台时,它可以正常工作.我究竟做错了什么?

javascript google-chrome youtube-api google-chrome-extension content-script

452
推荐指数
5
解决办法
24万
查看次数

Chrome扩展程序代码与内容脚本与注入脚本

我试图让我的Chrome扩展程序在init()加载新页面时运行该功能,但我无法理解如何执行此操作.根据我的理解,我需要在background.html中执行以下操作:

  1. 使用chrome.tabs.onUpdated.addListener()来检查时,页面变更
  2. 使用chrome.tabs.executeScript运行的脚本.

这是我的代码:

//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    chrome.tabs.executeScript(null, {code:"init();"});
});

//script.js
function init() {
    alert("It works!");
}
Run Code Online (Sandbox Code Playgroud)

我也想知道init()函数是否可以访问其他JS文件中的其他函数?

javascript scope google-chrome-extension content-script

57
推荐指数
1
解决办法
5万
查看次数

从chrome的扩展程序内容脚本中访问iframe内容

我正在做一个插件来对界面进行一些转换.我一直在unsafe javascript attempt to access frame with url.... Domains, protocols and ports must match(典型的跨站点问题)

但作为扩展程序,它应该可以访问iframe的内容http://code.google.com/chrome/extensions/content_scripts.html ...

没有人知道如何访问它的内容,以便它们可以被捕获吗?

html security iframe google-chrome-extension

34
推荐指数
2
解决办法
3万
查看次数

可以从Chrome扩展程序修改窗口对象吗?

我想制作一个Chrome扩展程序,在其中提供一个新对象window.当在加载了扩展名的浏览器中查看网页时,我希望window.mything通过Javascript提供.该window.mything对象将具有我将在扩展中定义的一些函数,并且console.log当在启用了扩展的浏览器中查看页面时,这些函数应该可以从任何Javascript文件调用.

我能够使用内容脚本成功地将Javascript文件注入页面:

var s = document.createElement("script"); 
s.src = chrome.extension.getURL("mything.js");
document.getElementsByTagName("head")[0].appendChild(s);
Run Code Online (Sandbox Code Playgroud)

mything.js看起来像这样:

window.mything = {thing: true};
console.log(window);
Run Code Online (Sandbox Code Playgroud)

每当页面加载时,我都会看到整个window对象,因为我希望它在控制台中.但是,我无法window.mything从控制台与对象进行交互.似乎注入的脚本没有真正修改全局window对象.

如何window从Chrome扩展程序修改全局对象?

javascript google-chrome-extension

26
推荐指数
5
解决办法
2万
查看次数

从内容脚本访问窗口变量

我有一个Chrome扩展程序,如果window.my_variable_name存在变量,它会尝试查找每个浏览过的网址(以及每个浏览器网址的每个iframe).

所以我写了一小段内容脚本:

function detectVariable(){
    if(window.my_variable_name || typeof my_variable_name !== "undefined") return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在尝试太久之后,似乎Content Scripts在一些沙箱中运行.

有没有办法window从Chrome内容脚本访问该元素?

sandbox google-chrome-extension content-script

22
推荐指数
1
解决办法
2万
查看次数

如何在Chrome扩展程序内容脚本中获取错误堆栈跟踪?

有一个谷歌Chrome扩展content script,处理发生在所有选项卡页面JS错误.但问题是没有一种常见的获取错误堆栈跟踪的方法不起作用.

例如,content scriptChrome扩展程序中有一段代码:

window.addEventListener('error', function(event) {
    console.log(event.error.stack); // event.error will be null
}, false);
Run Code Online (Sandbox Code Playgroud)

如果我在网页中调用此代码,那么event.error将包含Error具有stack属性的对象.

使用以下方法尝试获取堆栈跟踪的问题相同:

console.log((new Error()).stack));
Run Code Online (Sandbox Code Playgroud)

有没有人知道一些工作问题,以获得content scriptChrome扩展内的错误堆栈跟踪?

错误堆栈跟踪必须作为string或接收Array,并不意味着通过调用JS控制台中的某些输出console.trace().

如何重现:

  1. 下载https://mega.co.nz/#!ENw00YAC!92gBZEoLCO9jPsWyKht4dbjYyo0Zk-PU5YAj0h88-3Q
  2. 解压缩jzen.zip到某个/jsen文件夹
  3. chrome://extensions在您的Google Chrome中打开,启用Developer mode http://i.imgur.com/5x5D6NP.png
  4. 单击Load unpacked extension按钮并选择/jsen文件夹的路径
  5. 打开/jsen/content.js文件并添加console.log('JSEN', e.error.stack);到里面window.addEventListener('error', function(e) {
  6. 转到http://xpart.ru/_share/js.htm并在JS控制台中查看结果(Ctrl + Shift + J) …

javascript google-chrome google-chrome-extension

8
推荐指数
1
解决办法
4793
查看次数

内容脚本中的addEventListener不起作用

我有一个带有popup.html和注入内容脚本的chrome扩展.使用注入的内容脚本我试图访问youtube的javascript API函数,除了一个:addEventListener之外它一切正常.

Youtube的javascript API的事件监听器监听要更改的视频的状态.因此,如果到达视频结尾,则状态变为0.

var currentVideo = document.getElementById('movie_player');
currentVideo.addEventListener("onStateChange", "onytplayerStateChange");

function onytplayerStateChange() {
   console.log("The state of the player has changed");
}
Run Code Online (Sandbox Code Playgroud)

这段代码在正常环境中工作正常,但它无法在内容脚本中工作.为什么我不能在内容脚本中捕获更改事件?有任何想法吗?

javascript google-chrome google-chrome-extension youtube-javascript-api

7
推荐指数
1
解决办法
5444
查看次数

从chrome扩展中的内容脚本访问全局对象

我在.js文件中定义了一个全局对象.例如,file1.js包含全局对象SomeObject.此文件在background.html中加载.

由于file1.js包含在background.html中,因此我可以访问此页面中的全局对象.所以这里没有问题.

当执行诸如单击扩展按钮之类的事件时,我正在使用chrome.tabs.executeScript(null, {file: "contentscript.js"});api 运行内容脚本.

在这种情况下,如何访问脚本中的SomeObject?

html javascript google-chrome-extension

6
推荐指数
1
解决办法
2万
查看次数

访问chrome扩展中当前选项卡的所有窗口变量

任何人都可以发布用于访问chrome扩展中的窗口变量的代码.当我点击chrome扩展按钮时,我需要访问窗口变量.我正在获取窗口对象,但没有加载所有变量.我知道我们可以通过注入脚本来创建它.但我没有得到如何实现它.目前我正在尝试以下代码来获取当前活动选项卡的页面源.

 chrome.tabs.executeScript({code:
            "document.getElementsByTagName('html')[0].innerHTML"
        }, function(result) {
    var value = result[0];
    console.log(value);
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
        callback({
            url: tabs[0].url,
            title: tabs[0].title,
            jsonValue: value
        });
    });
}); 
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.非常感谢.

javascript google-chrome-extension

6
推荐指数
1
解决办法
5005
查看次数

从 Javascript 调用 Google Chrome 扩展

有一个名为Blipshot 的优秀扩展,它可以截取页面屏幕截图。我需要使用页面级 JavaScript 调用扩展,而不是单击其图标。这可能吗?

javascript google-chrome-extension

5
推荐指数
2
解决办法
1万
查看次数

如何从注入的脚本调用函数?

这是来自我的contentScript.js 的代码:

function loadScript(script_url)
  {
      var head= document.getElementsByTagName('head')[0];
      var script= document.createElement('script');
      script.type= 'text/javascript';
      script.src= chrome.extension.getURL('mySuperScript.js');
      head.appendChild(script);
      someFunctionFromMySuperScript(request.widgetFrame);// ReferenceError: someFunctionFromMySuperScript is not defined
  }
Run Code Online (Sandbox Code Playgroud)

但是从注入的脚本调用函数时出现错误:

ReferenceError: someFunctionFromMySuperScript 未定义

有没有办法在不修改mySuperScript.js 的情况下调用这个函数?

javascript google-chrome google-chrome-extension

5
推荐指数
1
解决办法
3283
查看次数