相关疑难解决方法(0)

重新声明javascript功能

我希望有人可以帮助我.我想通过扩展重新声明js函数.例如,网站上有基本的js功能:

function foo(){
..something here..
}
Run Code Online (Sandbox Code Playgroud)

我想通过自己的同名函数重新声明它.怎么做最容易的?

编辑1.我会尝试更好地解释.

网站上有一个本机代码:

Notifier = {
  debug: false,
  init: function (options) {
    curNotifier = extend({
      q_events: [],
      q_shown: [],
      q_closed: [],
      q_max: 3,
      q_idle_max: 5,
      done_events: {},
      addQueues: curNotifier.addQueues || {},
      recvClbks: curNotifier.recvClbks || {},
      error_timeout: 1,
      sound: new Sound('mp3/bb1'),
      sound_im: new Sound('mp3/bb2')
    }, options);

    if (!this.initFrameTransport() && !this.initFlashTransport(options)) {
      return false;
    }
    this.initIdleMan();

    if (!(curNotifier.cont = ge('notifiers_wrap'))) {
      bodyNode.insertBefore(curNotifier.cont = ce('div', {id: 'notifiers_wrap', className: 'fixed'}), ge('page_wrap'));
    }
  },
  destroy: function () {
    Notifier.hideAllEvents(); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery google-chrome-extension

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

window.getSelection返回undefined或null

这可能是一个非常初学的问题,但是我要拔掉头发,因为我无法弄清楚我做错了什么.此时,我要做的就是让所选文本在警报或控制台中打印(用于测试).我确保已将.toString()方法添加到返回的对象中,window.getSelection().无论我做什么,控制台和警报显示为空白.谁有人解释为什么?

我在本地Chrome扩展程序中执行此操作.

的manifest.json

{
    "manifest_version": 2,
    "name":"Testing",
    "version": "0.1",
    "icons": {
       "48":"48.png"
    },

    "background": {
        "scripts": [ "background.js" ]
    },

    "permissions":[ "tabs" ],

    "browser_action": {
        "default_icon": { "19":"img19.png" }
    }
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的

chrome.browserAction.onClicked.addListener(function(tab) {
    var selObj = window.getSelection();
    var selectionText = selObj.toString();
    alert(selectionText);       // displays a blank alert
    console.log(selectionText); // adds a blank line in the console
});
Run Code Online (Sandbox Code Playgroud)

我在学.提前致谢.

javascript google-chrome google-chrome-extension

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

在chrome扩展中使用页面的角度JS

我有一个HTML页面,其中有一些DOM配置了Angular.现在我正在构建一个chrome扩展来修改文本框中的值.element.value= newValue因为文本框是使用Angular设计的,所以不起作用.在阅读了一些资源后,我才知道我需要对元素的范围进行更改.我尝试在扩展中执行此操作.

var eleScope = window.angular.element(document.querySelector('.textbox')).scope();
eleScope.$apply(function() {
  eleScope.item.request.box = newValue;
});
Run Code Online (Sandbox Code Playgroud)

这似乎没有按预期工作.当我更深入地研究这个问题时,我开始知道窗口范围内的角度没有得到正确的范围.

我也尝试从我的扩展中注入angular.js并angular.element直接使用,这似乎也没有解决问题.

我错过了什么.感谢您的回复.

javascript google-chrome-extension angularjs

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

为什么chrome.runtime未定义?

我正在创建Google Chrome扩展程序(我的第一个扩展程序),并且我希望将扩展程序中的邮件发送到当前选项卡.

我正在关注文档:

https://developer.chrome.com/apps/runtime#event-onMessage

该扩展将一个小的外部JS加载到选项卡的HTML中,该HTML包含以下代码:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(request)
    }
);
Run Code Online (Sandbox Code Playgroud)

加载JS后,我收到以下错误:

Uncaught TypeError: Cannot read property 'onMessage' of undefined.

打开控制台和键入chrome,我可以看到运行时不是属性chrome.

看起来我做错了什么,但是什么?我需要在manifest.json文件中添加内容吗?

Chrome版本39.0.2171.71米

谢谢.

javascript google-chrome-extension

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

chrome.tabs.create/executeScript>属于该页面的调用函数

我正在为谷歌浏览器开发一个扩展程序,我遇到的问题是我需要能够调用属于在选项卡中打开的网页的JavaScript函数.

有关详细信息,该网站是我的网站,因此我知道该功能确实存在.该函数基于字符串值执行很多操作.我希望用户能够突出显示任何网页上的文字,点击Chrome扩展程序中的一个按钮,该按钮会自动加载我的网页,并使用突出显示的文本调用该功能作为其值.

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

chrome.tabs.create({ url: "https://mywebsite.com" }, function (tab) {
    var c = "initPlayer('" + request.text + "');"; ////'request.text' is the highlighted text which works
    chrome.tabs.executeScript(tab.id, { code: c });
});
Run Code Online (Sandbox Code Playgroud)

但Chrome控制台说:"未捕获的ReferenceError:未定义initPlayer."

我知道函数确实存在,因为它存在于我自己网站上的代码中.

任何帮助都非常感谢.谢谢!

javascript google-chrome google-chrome-extension

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

从新的 dom 按钮调用内容脚本函数

这是一个非常简单的例子:

清单文件

{
  ...
  "content_scripts": [
    {
      "js": [
        "/js/external/jquery-2.1.3.min.js", 
        "/js/content_script.js"
      ],
      ...
    }
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

content_script.js

function demo() {
  alert('demo');
}

$(function() {
  $( "body" ).prepend( 
    "<input type=\"button\" value=\"Press me\" onclick=\"demo()\" />"
  );
});
Run Code Online (Sandbox Code Playgroud)

我在控制台中收到此错误:

{
  ...
  "content_scripts": [
    {
      "js": [
        "/js/external/jquery-2.1.3.min.js", 
        "/js/content_script.js"
      ],
      ...
    }
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

如何让功能发挥作用?

javascript jquery google-chrome-extension

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

无法删除chrome中的内联事件处理程序

我想删除一个包含onsubmit内联定义的表单的事件处理程序.

<form id="loginForm" onsubmit="return performTask(this);">
Run Code Online (Sandbox Code Playgroud)

我已经尝试过:

$("#loginForm").off("submit")
$("#loginForm").unbind("submit")
$("#loginForm").die("submit")
$("#loginForm").removeAttr("onsubmit")
$("#loginForm").removeProp("onsubmit")
$("#loginForm").attr("onsubmit", "")
$("#loginForm").prop("onsubmit, "")
$("#loginForm")[0].onsubmit = null
$("#loginForm")[0].onsubmit = undefined
$("#loginForm")[0].onSubmit = null
$("#loginForm")[0].onSubmit = undefined
Run Code Online (Sandbox Code Playgroud)

什么都行不通!

我在j()的jquery方法中添加了我自己的事件监听器,但它永远不会被调用.它是旧的事件监听器在我之前执行的...它与按钮上的onClick事件做同样的事情.

我必须明确表示我正在使用chrome扩展,更确切地说是在页面中注入的内容脚本中.

所以问题是,有没有办法清除事件处理程序?或者更好的是有没有办法添加一个将在内联处理程序之前调用的事件监听器?

编辑:经过许多丑陋的代码,我找到了一种方法来做我想要的...我做了一个表单的副本,删除内联envent处理程序,在我的dom旧表单中替换然后创建我的事件处理程序.这很难看,但它有效...如果有人能解释为什么我不能这样做...

javascript jquery events google-chrome google-chrome-extension

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

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