相关疑难解决方法(0)

Change navigator.platform on Chrome, Firefox, or IE to test OS detection code

How can I spoof the value of navigator.platform on Chrome, Firefox, or Internet Explorer (preferably Chrome)? It looks like it used to be possible on Firefox natively but that support was dropped for that.

This is to test some code on a site which runs in a conditional JavaScript check which tests the navigator.platform property. Unfortunately it's not testing userAgent which would be easy to change.

I tried writing a simple chrome extension per the suggestion in the second post …

javascript browser google-chrome-extension

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

Chrome 扩展程序可以将什么脚本注入到页面中来访问 React 元素?

我希望我的 Chrome 扩展能够与包含一些简单 React 组件的页面进行交互 - 一个位于大量纯 javascript/html 中间的表格。

我的扩展不是用 React 构建的。

您可以通过 Chrome 扩展将什么脚本注入到页面中,以访问 React Elements(获取其键值等)?一个简单的例子将极大地帮助我......

这是我到目前为止所做的:

我可以注入脚本并附加到页面正文...但不确定如何“导入反应”或以其他方式利用页面上的 React 代码。

使用控制台中的 React 检查器,我可以看到一个以行作为子元素的元素。

我如何获得该元素的子元素?例如,他们的关键价值观是什么?

如果我注入以下脚本,我只会收到“意外标识符”错误:

import React from 'react';
import ReactDOM from 'react-dom';
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下内容的变体(在我注入的脚本中)...没有找到 React(我知道它在那里)...记录了“Inside FindReact function...1”消息,但没有其他内容(所以我知道我的脚本注入没有错误)。

console.log('In React script...run sub...');
reactSub();

function reactSub(){
    console.log('Inside FindReact function...1');
    window.FindReact = function(dom) {
        for (var key in dom) {
                    console.log('Loooping...');
            if (key.startsWith("__reactInternalInstance$")) {
                var compInternals = dom[key]._currentElement;
                var compWrapper = compInternals._owner;
                var comp = compWrapper._instance;
                            console.log('Inside FindReact function...2') + console.log(comp);
                return …
Run Code Online (Sandbox Code Playgroud)

google-chrome-extension reactjs

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

如何强制 Google Docs 从 Chrome 扩展中渲染 HTML 而不是 Canvas?

Google 文档更新为基于画布的渲染而不是 HTML 渲染后,是否可以强制 Google 文档从 chrome 扩展而不是画布渲染 HTML?不知何故,像 Grammarly 这样的 chrome 扩展能够做到这一点,但我不完全确定如何做到。

根据我的研究,虽然我认为是什么允许他们通过 _docs_force_html_by_ext 变量来做到这一点,但我相信这仅适用于白名单扩展。

我可以填写某种替代方案或表格来将我的扩展程序列入白名单吗?

在此输入图像描述

_docs_force_html_by_ext 未定义:在此输入图像描述

_docs_force_html_by_ext 通过 Grammarly 设置:在此输入图像描述

javascript google-chrome-extension

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

Chrome扩展程序 - 自动运行

我想知道每次页面加载时是否可以自动运行我的扩展(或我的扩展中的功能)?现在,我已设置您将单击图标浏览器操作图标以运行我的扩展.

javascript autorun google-chrome-extension

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

上传前使用chrome扩展程序抓取文件

使用我的chrome扩展程序我想在上传到网站之前抓取一个文件(也许可以更改它).特别是来自文件输入.换句话说,如果我选择一个带有输入[type = file]的文件,我希望我的chrome扩展程序能够中断任何提交并获取文件.然后我的扩展程序将其魔法应用于文件,之后可以提交/上传文件.我怎么能接近这个?

文件路径出现问题.如果我抓住文件输入的vaule,由于HTML5标准和兼容性问题,它总是将实际路径更改为"C:\ fakepath \".我怎么才能访问该文件呢?也许它暂时保存在一些镀铬存储器中?

编辑:嗯,我设法读取文件输入中选择的文件,如下所示:

var file;
$('input[type=file]').change(function(e){
    file = e.target.files[0];
    var reader = new FileReader();      
    reader.onload = function (event) {
        console.log(event.target.result);  //contains the file data
        //maybe change data and use filewriter  

    };      
    reader.readAsDataURL(file);
};
Run Code Online (Sandbox Code Playgroud)

现在我想使用FileWriter写入e.target.files [0]

我按照本教程:http: //www.html5rocks.com/en/tutorials/file/filesystem/ 但我无法创建正确的FileWriter.

没有必要写入磁盘上的原始文件 - 可能甚至不可能 - 但我需要在相应的文件输入表单字段中更改用于上载的数据.

forms file-upload file google-chrome-extension

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

关于注入脚本 + 本地存储的 Chrome 扩展

我对我的第一个“将所有内容放在一起”的 Chrome 扩展程序感到困惑,我将描述我正在尝试做的事情,然后我是如何通过一些脚本摘录来解决这个问题的:

  1. 我有一个 options.html 页面和一个 options.js 脚本,它允许用户在文本字段中设置一个 url——这使用 localStorage 存储。
function load_options() {
   var repl_adurl = localStorage["repl_adurl"];
   default_img.src = repl_adurl;
   tf_default_ad.value = repl_adurl;
}

function save_options() {
   var tf_ad = document.getElementById("tf_default_ad");
   localStorage["repl_adurl"] = tf_ad.value;
}

document.addEventListener('DOMContentLoaded', function () {
   document.querySelector('button').addEventListener('click', save_options);
});

document.addEventListener('DOMContentLoaded', load_options );
Run Code Online (Sandbox Code Playgroud)
  1. 我的 contentscript 将脚本“myscript”注入页面(因此它可以访问页面 html 中的 img 元素)
var s = document.createElement('script');
s.src = chrome.extension.getURL("myscript.js");
console.log( s.src );
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);
Run Code Online (Sandbox Code Playgroud)
  1. myscript.js应该以某种方式获取本地存储数据并决定如何操作图像元素。

我从 html 源中抓取图像没有任何问题,但我似乎无法访问 localStorage 数据。我意识到它必须与具有不同环境的两个脚本有关,但我不确定如何克服这个问题——据我所知,我需要从 contentscript.js 注入 myscript.js,因为 contentscript.js 没有可以访问 html 源代码。 …

javascript google-chrome-extension content-script

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

单击 chrome 扩展中的页面

chrome 扩展如何点击活动页面上的按钮?

网络上有平庸的页面。页面上有带有特定 ID 的按钮类型的简单元素。还有一个带按钮的Chrome扩展程序。我想点击扩展按钮,然后按钮依次点击页面按钮。

var someElement = document.getElementById('someElement');
someElement.addEventListener('click', function () {
  // here I'd like to click on a button with specific ID.
});
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension

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

从内容脚本向页面 Javascript 发送消息

我在 Javascript 运行时中有一个选项卡的方法,我想从扩展的内容脚本中触发该选项卡。从表面上看,这需要在上下文之间传递消息,但我找不到 CS 到选项卡消息的任何文档,只有选项卡到 CS 或 CS 到后台。本质上,我想翻转内容脚本参考的“与嵌入页面的通信”部分。

到目前为止,我window通过注入一个小的 Javascript 有效负载将事件侦听器附加到选项卡(这将在正确类型的消息上触发选项卡方法):

listenerScript = document.createElement('script');
listenerScript.textContent = "window.addEventListener('message',function(ev){console.log('New event: ' + ev);},false);console.log('installed');";
(document.head||document.documentElement).appendChild(listenerScript);
listenerScript.remove();
Run Code Online (Sandbox Code Playgroud)

该侦听器已注册,但我无法弄清楚如何从我的内容脚本触发它。window.postMessage()内容脚本中的似乎没有做任何事情,并且文档仅讨论使用chrome.runtime创建端口,这是用于后台脚本的。

如何以最简单的方式将消息从内容脚本传递到选项卡?

javascript google-chrome-extension dom-events content-script

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

从浏览器扩展调用网页 JavaScript 方法

我正在使用webExtensions开发一个Firefox扩展,这将帮助我简化以下场景的工作。

我必须在站点上单击大约 50-60 个按钮来更新任务状态。单击此按钮后,网页将调用网页的updTask(id)JavaScript 函数,然后调用 Web 服务来更新任务。

我无法使用以下代码从我的内容脚本中执行此操作:

清单.json

"permissions": [
    "activeTab",
    "cross-domain-content": ["http://workdomain.com/","http://workdomain.org/","http://www.workdomain.com/","http://www.workdomain.org/"]
  ]
Run Code Online (Sandbox Code Playgroud)

内容脚本代码:

function taskUpdate(request, sender, sendResponse) {
  console.log(request.start + 'inside task update');
  updateTask(45878);
  chrome.runtime.onMessage.removeListener(taskUpdate);
}

function updateTask(id) {
  //TODO: code to get all buttons and task id's
  updTask(id);  // Not working
}
Run Code Online (Sandbox Code Playgroud)

插件脚本:

document.addEventListener("click", function(e) {
  if (e.target.classList.contains("startButton")) {

    chrome.tabs.executeScript(null, {
      file: "/content_scripts/taskUpdate.js"
    });

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      chrome.tabs.sendMessage(tabs[0].id, {start: "start"});
    });
    return;
  }
  else if (e.target.classList.contains("clear")) …
Run Code Online (Sandbox Code Playgroud)

javascript jquery cross-domain browser-plugin firefox-addon-webextensions

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

模拟人为点击并在下拉菜单上选择

我试图通过带有javascript的chrome扩展名从国家/地区下拉菜单中选择一个选项。当我正常通过国家/地区下拉菜单选择一个选项时,状态下拉列表中的值会根据我的选择而更改。

我尝试用多种方法选择一个选项,其中大多数是:

$('#order_billing_country').val('CANADA').trigger("change")
$('#order_billing_country').val('CANADA').trigger('select')
$('#order_billing_country').val('CANADA').trigger('onselect')
Those past 3 but triggering select, onselect, and change
$('select').find('option[value=CANADA]').attr('selected','selected').end().trigger('onselect');
Run Code Online (Sandbox Code Playgroud)

什么都没起作用...他们更改了国家/地区下拉列表中的值,但没有触发状态下拉列表中的更改。有没有办法通过javascript选择一个选项,就像我是人类一样?...

javascript jquery google-chrome-extension

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

如何在 Chrome 扩展清单版本 3 中获取请求的 API 响应正文

我正在开发清单版本 3,并陷入了通过 chrome 扩展中请求的 API 获取响应正文的无尽漏洞。

目标是获得所有请求的 API 响应

这是代码。

清单.json

{
  "name": "Chapter 28 (MV3)",
  "version": "1.0",
  "manifest_version": 3,
  "description": "This is Chapter 28",
  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    }]
  },
  "permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestFeedback"
  ],
  "background": {
    "service_worker": "background.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

规则_1.json

  [
  {
    "id": 1,
    "priority": 1,
    "action": {
      "type": "block"
    },
    "condition": {
      "urlFilter": "yahoo.co.jp",
      "resourceTypes": ["main_frame"]
    }
  },
  {
    "id": 2,
    "priority": 1,
    "action": {
      "type": "allow"
    }, …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension chrome-extension-manifest-v3 chrome-declarativenetrequest

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

chrome扩展:如何将'keydown'事件发送到页面输入?

我有一个测试网页,如果我点击输入字段中的某个键,它会发出警告:

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="jquery-1.9.1.min.js"></script>
  <script>
    $( document ).ready( function() {
      $( '#foo' ).keydown( function() { alert( "debug" ); } );
    });
  </script>
</head>
<body>
  <input id='foo' type='type'/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有这个chrome扩展,修改输入文本并触发keydown事件:

$( document ).ready( function() {
  window.setTimeout( function() {
    $( '#foo' ).val( "foo" );
    $( '#foo' ).keydown();
  }, 2000 );
});
Run Code Online (Sandbox Code Playgroud)

如果我安装扩展,2秒后(如预期的那样)文本被修改 - 但是没有显示警报,所以我可以建议keydown事件不会从扩展沙箱传递到页面javascript处理程序.是否有可能以某种方式修改我的代码,因此扩展可以模拟页面上的javascript可以看到的keydown?我通过chrome扩展自动化第三方网站,其中一个输入需要keyup检测价值变化(我自动化的页面写得很糟糕 - 但我没有任何控制其他源代码).

google-chrome-extension

0
推荐指数
1
解决办法
3606
查看次数

如何在没有jquery的情况下将脚本注入文档&lt;head&gt;

我正在构建一个浏览器扩展,并且在<script>标签内部有一个函数,该函数可以修改需要注入<head>任何给定网页的DOM 。整个函数是一个string("<script>function content blah blah</script>")。我正在使用jQuery来实现这一点:

$('head').prepend(modFunction);
Run Code Online (Sandbox Code Playgroud)

而且效果很好。我出于某些原因希望删除jQuery,但是当我尝试创建一个<script>元素注入普通<head>javascript时,一切都会失败。到目前为止,我已经尝试了两种方法:

1。

  var headSelector = document.querySelector('head');
  var el = document.createElement('div');
  el.innerHTML = modFunction;
  modFunction = el.firstChild;
  headSelector.insertBefore(modFunction, headSelector.firstChild);
Run Code Online (Sandbox Code Playgroud)

2。document.head.insertAdjacentHTML('afterbegin', modFunction);

两种javascript尝试都将<script>具有正确功能的标记插入<head>,但是均未执行该功能。不知道为什么jQuery可以正常工作,而普通的javascript无法正常工作。任何帮助将不胜感激。谢谢

html javascript jquery dom google-chrome-extension

0
推荐指数
1
解决办法
2839
查看次数