谷歌浏览器扩展 - 如何开启/关闭JavaScript?

41

有没有可能使用自制的Google Chrome扩展程序来开启/关闭JavaScript?

例如,在Opera浏览器中,可以通过小部件、用户自定义按钮等简单方式实现,但我在Chrome中没有找到任何解决方案(我的第一来源是官方Google Chrome扩展文档)。

一个奇怪的问题是,我需要JavaScript来运行扩展程序本身……如果我使用扩展程序关闭JavaScript,那么在这之后我还能在扩展程序中使用JavaScript吗?


编辑:

现在已经可以通过chrome.contentSettings.javascript实现了!
请查看此示例以了解如何使用它(快速JavaScript开关扩展,在这里链接mlb)。


你的意思是你的扩展应该切换浏览器的JS吗?还是只是为了禁用扩展?没有JavaScript,你的扩展将一无是处... - DarkLeafyGreen
第一个版本,所以我想切换浏览器的JS - 这样我就可以测试我的网站在没有JS的情况下如何工作。在构建网站时,每次都要去选项中关闭和重新打开JS太麻烦了 - 如果我只能用一个单击(或热键组合)来打开和关闭它,那将会简单得多。我知道这是自相矛盾的,因为扩展需要JavaScript... :)) 但我只是想知道是否有任何解决方案。 谢谢! - Sk8erPeter
5个回答

55

哇,谢谢 mlb,这篇文章真的非常有用!我尝试了这个扩展程序,在启用实验性 API 使用后似乎完美地运行了!我把采纳答案改成了你的,因为这似乎是一个真正的解决方案! :) - Sk8erPeter
顺便问一下,你知道通过扩展(就像你链接的那个)切换某些设置的机会何时会“最终”(而不仅仅是实验性的)吗?再次感谢! :) 我必须再添加一个评论:这个实验性API似乎非常好,因为有了它,人们还可以使用扩展在Chrome的右键上下文菜单中添加新项目!如果不启用实验性API也可以完成这项工作,那将非常好。 :) - Sk8erPeter
嘿Sk8erPeter,自Chrome 16以来,ContentSettings API不再是实验性的;) 至于您的建议,如果我理解正确,您想要相同的QJS按钮,但在右键菜单中? - mlb
嗨,mlb!不,还没有,我刚刚意识到开发人员已经可以通过扩展程序扩展右键上下文菜单的实用性。 :) 谢谢!这对于扩展程序开发人员可能很有用:http://code.google.com/chrome/extensions/trunk/contentSettings.html! - Sk8erPeter
看起来很不错,但它需要读取我的浏览历史的权限有什么原因吗? - DanielG

4

目前看来,扩展程序无法禁用JavaScript支持。在Chromium跟踪网站上甚至有一个相关的功能请求。我们需要耐心等待,直到Google决定支持它。


感谢您的回答,mlemos!我编辑了我的原始帖子,请也阅读修改内容,谢谢! :) 我希望Google在不久的将来能让我们控制选项,类似于Opera(或任何其他舒适的解决方案都可以)。 - Sk8erPeter

1

目前,我们无法通过您的Chrome扩展程序访问chrome://settings/content数据。

在我的代码中,当创建“chrome://settings/content”选项卡时,警告(0)不起作用,并且始终会出现以下错误:

在tabs.executeScript期间发生错误: 无法访问url“chrome://settings/content”。 扩展程序清单必须请求权限以 访问此主机。

但是,当创建“http://www.google.com.hk”选项卡时,警告(0)可以正常工作。

因此,我认为我们无法访问chrome://settings/*数据:

popup.html:

<html>
<head>
<script>
  function openSetting() {
    chrome.tabs.create({"url":"chrome://settings/content", "selected":true});
  }

  function openGoogle() {
    chrome.tabs.create({"url":"http://www.google.com.hk", "selected":true});
  }

  //chrome.browserAction.onClicked.addListener(enableDisableImage);

    chrome.tabs.onCreated.addListener(function(tab) {
        chrome.tabs.executeScript(null, {code:"alert(0)"});
    });
</script>
</head>
<body>
<input type="button" onClick="openSetting()" value="Switch"/>
<input type="button" onClick="openGoogle()" value="Switch"/>
</body>
</html>

manifest.json:

{
  "name": "ImageSwitcher",
  "version": "1.0",
  "description": "Disable/Enable loading image",
  "browser_action": {
    "default_icon": "icon.png",
        "default_popup": "popup.html"
  },
  "permissions": [
    "tabs",
        "*://*/*"
  ]
}

1

1
谢谢,但这正是mlb在2011年10月6日早些时候在这里提到的完全相同的扩展程序。 :) 看看:https://dev59.com/Mm445IYBdhLWcg3w3N0f#7673539。但是,了解到似乎已经可以在不使用*实验性API*的情况下切换JS,这也很有用(如果我没记错的话),所以也谢谢!你应该得到一个+1. :) - Sk8erPeter

0

这是我找到的唯一一种停止Chrome扩展运行JavaScript的方法。请复制以下代码:

function exit() {
    'use strict';
    window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);

    let handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll', 'selectstart',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'input',
        'abort', 'close', 'drop', 'dragstart', 'drag', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];

    function eventHandler(e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for(let i=0; i < handlers.length; i++) {
        window.addEventListener(handlers[i], eventHandler, true);
    }

    if(window.stop) {
        window.stop();
    }

    Array.prototype.forEach.call(document.querySelectorAll("*"), el => {
        if( document.defaultView.getComputedStyle(el)["-webkit-user-select"] == "none" ) {
            //el.style.webkitUserSelect = "auto";
            el.style.setProperty("-webkit-user-select", "auto", "important");
        }
    });

    throw '';
}
exit();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接