从chrome扩展名设置活动页面中的活动输入值

时间:2017-03-15 15:40:31

标签: javascript google-chrome google-chrome-extension

我为Chrome写了一个扩展程序。我希望当我点击我的扩展程序中的按钮时,值'abc'将被设置为活动页面上的活动输入。 enter image description here 这是我的代码: 1)manifest.json

{
    "name": "Test",
    "short_name": "Test",
    "manifest_version": 2,
    "version":"2.0.0.0",
    "browser_action": {
        "default_popup": "index.html",
        "default_title": "Load EmojiSelector"
    },
    "background":{
        "scripts":["background.js"],
        "persistent": false
    },
    "content_scripts":[
    {
        "matches":["http://*/*", "https://*/*"],
        "js":["content.js"]
    }
    ]
    ,
    "permissions": [
      "activeTab"
    ]
}

2)index.html

    <!DOCTYPE html>
<html>
<head>  
    <title>Test SendMessage</title>
    <script src='content.js'></script>
</head>
<body>
    <input id='btsend' type='button' value='Send abc to input'>
</body>
</html>

3)background.js

    chrome.runtime.onMessage.addListener(function(response, sender, sendResponse){
    var act = chrome.tabs.getSelected(null, function(tab){
        //How to set the value of response to active input in page????
    });
});

4)content.js

    onload=function(e){
    var btsend = document.getElementById('btsend');
    btsend.onclick = function(){
        chrome.runtime.sendMessage('abc');  
    }
}

如何使用DOM为活动页面中的活动输入设置值。

1 个答案:

答案 0 :(得分:1)

  1. 请务必阅读extension architecture:您的弹出式脚本应与内容脚本不同。实际上,您根本不需要无条件注入的内容脚本,请使用官方示例扩展chrome.tabs.executeScript中显示的Page Redder

    注意:无法在默认的新标签页上插入文字,因为Chrome会将键盘输入重定向到其内置的多功能框(地址栏),该按钮只接受可信(真实)按键,而不是从JavaScript发送的按键。< / p>

  2. 正确的弹出式脚本应将click侦听器附加到元素

  3. 此任务完全不需要后台页面脚本
  4. 的manifest.json:

    {
        "name": "Test",
        "manifest_version": 2,
        "version":"2.0.0.0",
        "browser_action": {
            "default_popup": "popup.html",
            "default_title": "Load EmojiSelector"
        },
        "permissions": [
          "activeTab"
        ]
    }
    

    popup.html:

    <input id='btsend' type='button' value='Send abc to input'>
    <script src='popup.js'></script>
    

    popup.js:

    document.getElementById('btsend').onclick = () => {
        chrome.tabs.executeScript({file: 'content.js'});
    };
    

    content.js:

    document.execCommand('insertText', false, 'abc');