相关疑难解决方法(0)

如何检查Canvas框架

我刚看到这个链接,关于如何在Chrome开发工具上检查"Canvas框架",但是如何在Chrome扩展程序上进行检查?

我认为chrome.debugger.sendCommand应该在这里使用该方法.

在此输入图像描述

如何在Chrome扩展程序上执行此操作?

编辑:我通常想要使用Chrome的调试器或类似方法检查这些数据,而无需与JavaScript的代码交互.

javascript google-chrome-extension google-chrome-devtools

7
推荐指数
2
解决办法
8652
查看次数

使用 chrome 扩展 v3 从内容脚本注入 javascript

我正在将我的扩展从 V2 迁移到 V3。现在除了一件事之外一切都工作正常。在我的 V2 版本中我做了

const actualCode = '(' + function () { 'console.log("demo");' } + `)();`;
const script = document.createElement('script');
script.textContent = actualCode;
(document.head || document.documentElement).appendChild(script);
script.remove();
Run Code Online (Sandbox Code Playgroud)

请注意,这console.log("demo")是我需要注入的简化:)

我需要注入一些 javascript 才能使 chrome-extension-magic 生效。

现在,在 V3 中这不再起作用了。我在 devtools-console 中收到以下错误

content.js:23114 
    
   Refused to execute inline script because it violates the following 
   ContentSecurity Policy directive: "script-src 'self'". Either the 
   'unsafe-inline' keyword, a hash ('sha256-tN52+5...6d2I/Szq8='), or a nonce
   ('nonce-...') is required to enable inline execution.
Run Code Online (Sandbox Code Playgroud)

在迁移指南中我注意到这一部分

"content_security_policy": {
   "extension_pages": "...", …
Run Code Online (Sandbox Code Playgroud)

javascript migration google-chrome-extension chrome-extension-manifest-v3

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

Chrome扩展程序可读取HTTP响应

我有这个Chrome扩展程序,可以在发送请求之前修改请求标头.我现在希望能够在同一扩展中检查响应的标题.我搜索了整个Chrome扩展API,但我找不到任何有趣的东西.

这是我用来修改请求标头的代码,也许对你来说知道我是怎么做的很有用.

chrome.webRequest.onBeforeSendHeaders.addListener(
      function(details) {/*do something*/},
      {urls: ["<all_urls>"]},
      ["blocking", "requestHeaders"]);
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做,或者可以指向一个有趣的来源?谢谢

google-chrome-extension

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

从Chrome扩展程序访问Websocket流量

有一个页面(游戏),该页面通过WebSocket与服务器通信。我可以在Chrome开发者工具中查看数据(框架)。是否可以通过chrom-extension访问/修改此通信?

websocket google-chrome-extension

6
推荐指数
3
解决办法
4497
查看次数

访问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
查看次数

检测网址上的更改

我需要一些东西来检测网址上的更改,但页面不会回发,它会动态更改,只添加html中的div,所以URL页面是这样的

HTTP://www.examplepage/conversations/44455

当我点击页面的另一部分时,它就是

HTTP://www.examplepage/conversations/44874

它不仅在最后变化,而且像这样

HTTP://www.examplepage/settings

没有做回发和重新加载JavaScript所以我的问题是,有没有办法检测这些变化?和事件监听器但如何?

我搜索并且每个人都说哈希事件,但是在任何哈希之后我没有任何值,所以它不起作用

编辑

只是为了记录,我没有页面的代码,也没有访问权限,我会更好地解释,我正在做一个后台谷歌扩展,我只是添加了一个幻灯片到现有页面,这个页面改变了我的方式我解释的方式以上.url会像每个页面一样发生变化,但是它们会更改html中的div,这样页面就不必再次收取所有内容了

javascript url jquery google-chrome-extension dom-events

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

Chrome扩展程序:如何禁用页面可见性API

我正在编写一个Chrome扩展程序,需要阻止网页触发文档可见性更改事件.至少我需要能够覆盖document.visibilityState(即使它是一个只读属性).如果不可能,因为此扩展程序仅用于我的目的而不会在Chrome扩展程序商店中,我是否可以通过配置Chrome浏览器来实现我的目标?我只需要在Chrome"开发者模式"启用时使用此扩展程序,而不是其他时间.

我希望有人能想出一种创造性的方法来实现这一目标.谢谢.

请注意!4年前的答案中有一个解决方案,在较新版本的Chrome中不再生效: 欺骗或禁用Page Visibility API

自己测试一下:

// This codes worked 4 years ago but not anymore
var c='(function(){var a=Node.prototype.addEventListener;Node.prototype.addEventListener=function(e){if(e=="visibilitychange"||e=="webkitvisibilitychange"){}else a.apply(this,arguments)}})()'
, E=document.documentElement;
E.setAttribute('onreset', c);
E.dispatchEvent(new CustomEvent('reset'));
E.removeAttribute('onreset');

// THIS WILL STILL LOG THE STATES EVEN WITH THE ABOVE CODE RUNNING
document.addEventListener("visibilitychange", function() {
    console.log( document.visibilityState );
});
Run Code Online (Sandbox Code Playgroud)

如果在Chrome中无法实现,是否有Firefox/Safari/Opera浏览器代码可以实现这一目标?

javascript jquery html5 google-chrome google-chrome-extension

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

在Chrome扩展开发中,如何将变量从background.js传递到嵌入为脚本节点的内容脚本?

更新:对不起,我不清楚我的情况.内容脚本不是字面上的内容脚本,而是通过该createElement方法嵌入到页面中的js文件.

它是这样的:

// this is "content.js"
var scriptElement = document.createElement('script');
scriptElement.src = 'chrome-extension://' + chrome.runtime.id + '/js/page-inject.js';
(document.head || document.documentElement).appendChild(scriptElement);
Run Code Online (Sandbox Code Playgroud)

我想在"page-inject.js"中使用它,而不是"content.js"

我认为这很简单,但经过数小时的重试和搜索后失败了.

background.js喜欢这样的:

chrome.tabs.query({active: true, currentWindow: true}, 
function(tabs) {
  chrome.tabs.executeScript(tabs[0].id, {
    code: 'window.my_var = 123'
  }, function() {
    chrome.tabs.executeScript(tabs[0].id, {file: 'js/content.js'});
  });
});
Run Code Online (Sandbox Code Playgroud)

在此之后,当我在该页面的控制台中键入"window.my_var"时.它不起作用.想要的"123"没有出现.

如果我替换code: 'window.my_var = 123'alert(123),它的工作原理.但我需要的是将一个变量从我的后台脚本(background.js)传递到我的扩展注入的网页.

我的尝试有什么问题吗?

google-chrome-extension

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

chrome扩展程序无法使用内容脚本和其他方式从Google加载外部JavaScript

我正在写一个chrome扩展程序,它将为facebook中的特定文本框启用音译。

我已经使用脚本标签在background.html中加载https://www.google.com/jsapi

这是我尝试使用ajax和通用方式加载的内容脚本中使用的代码。

当我检查它说谷歌未定义。

/*
$.ajax({
  url: "https://www.google.com/jsapi",
  dataType: "script",

});
*/

var script = document.createElement("script"); 
script.setAttribute('type','text/javascript'); 
script.setAttribute('src','https://www.google.com/jsapi?'+(new Date()).getTime()); 
document.body.appendChild(script);

$(document).ready(function()
{
    alert(google)
    if(window.location.href.indexOf('facebook.com'))
        yes_it_is_facebook();
})



function yes_it_is_facebook()
{
//  document.getElementsByName('xhpc_message_text')[0].id = 'facebook_tamil_writer_textarea';

//  alert(document.getElementsByName('xhpc_message').length)

    google.load("elements", "1", { packages: "transliteration" });  
    google.setOnLoadCallback(onLoad);   
}

function onLoad()
{
    var options = {
                sourceLanguage:
                    google.elements.transliteration.LanguageCode.ENGLISH,
                destinationLanguage:
                    [google.elements.transliteration.LanguageCode.HINDI],
                shortcutKey: 'ctrl+g',
                transliterationEnabled: true
            };

    var control = new google.elements.transliteration.TransliterationControl(options);  
    control.makeTransliteratable(['facebook_tamil_writer_textarea']);   
}
Run Code Online (Sandbox Code Playgroud)

我在manifest.json内容脚本数组中有https://www.google.com/jsapi

  "content_scripts": [
    {
        "matches": ["<all_urls>"],
      "js": ["js/jquery-1.7.2.min.js", "js/myscript.js", "https://www.google.com/jsapi"]
    } …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension

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

从chrome扩展内容脚本执行网页js

我在我的网页html代码中有这个js函数.

function update() {
    document.getElementById( "textbox ").value = updatetext;
}
Run Code Online (Sandbox Code Playgroud)

当我从chrome控制台执行"update()"时,它可以工作.
但是如果我从chrome扩展程序执行,

chrome.tabs.executeScript(tab.id, {code: "update();"}, function(result){});
Run Code Online (Sandbox Code Playgroud)

它说没有定义更新.但如果我用"alert('ok')替换",它就有效.
然后我执行

eval("update()")
Run Code Online (Sandbox Code Playgroud)

在Chrome扩展程序内容脚本中.它还说"未定义更新".

那么我该怎么做才能在网页上调用js函数呢?

javascript google-chrome google-chrome-extension

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