Chrome扩展程序突出显示文本选择chrome.tabs

时间:2013-12-12 03:51:31

标签: javascript html google-chrome-extension

我在使用Chrome扩展程序时遇到了问题。我有权限“标签”,但我不知道如何在页面上检索所选文本WITHOUT<背景页面。 < ----我改变了主意,我可以拥有背景页。

这是脚本:

  

var code = document.getSelection()。toString();
  document.getElementsById(“q”)。value = code;

我放置了一个chrome.executeCommand方法(不记得该方法是如何定向的),但这也没有用。 安装此扩展时,我不希望背景页面阻止延迟。当我有背景时,它可能不会导致很多延迟,但每一件都很重要。此外,基本上我的扩展将是一个便携式谷歌它!扩展名,如果您突出显示/选择文本,它将自动设置输入字段的值。点击 https://www.dropbox.com/sh/c7q2puadva2vojf/GsuwWcXHjr到目前为止看到我的进展!

1 个答案:

答案 0 :(得分:3)

(在几种可能的方法中)你可以达到你想要的效果:

  1. 加载弹出窗口后,使用 chrome.tabs.executeScript() 将一些代码注入选项卡的网页。
  2. 从注入的代码中查找并返回所选文本。
  3. 填充"搜索查询"带有返回文本的输入字段。
  4. 当"搜索"单击按钮,打开包含谷歌搜索结果的新选项卡。

  5. 以下是完全相同的示例扩展的源代码:

    maifest.json

    {
        "manifest_version": 2,
    
        "name":    "Test Extension",
        "version": "0.0",
    
        "browser_action": {
            "default_title": "Test Extension",
            "default_popup": "popup.html"
        },
    
        "permissions": [
            "<all_urls>"
        ],
    }
    

    popup.html

    <!DOCTYPE html>
    <html>
        <head>
            <title>Google It!</title>
            <script type="text/javascript" src="popup.js"></script>
        </head>
        <body>
            <input type="text" id="inp" size="20" placeholder="Search query..." />
            <br />
            <input type="button" id="btn" value="Google It!" />
        </body>
    </html>
    

    popup.js

    /* The URL for the Google search */
    var google = 'http://google.com/#q=';
    
    /* The function that finds and returns the selected text */
    var funcToInject = function() {
        var range = window.getSelection().getRangeAt(0);
        var selectedText = range.cloneContents().textContent;
        return selectedText;
    };
    /* This line converts the above function to string
     * (and makes sure it will be called instantly) */
    var jsCodeStr = ';(' + funcToInject + ')();';
    
    window.addEventListener('DOMContentLoaded', function() {
    
        /* Find our input elements from `popup.html` */
        var inp = document.querySelector('input[type="text"]#inp');
        var btn = document.querySelector('input[type="button"]#btn');
    
        /* Open a new tab with the search results */
        btn.addEventListener('click', function() {
            var query = encodeURIComponent(inp.value);
            chrome.tabs.create({ url: google + query });
        });
    
        /* Inject the code into all frames of the active tab */
        chrome.tabs.executeScript({
            code: jsCodeStr,
            allFrames: true
        }, function(selectedTextPerFrame) {
    
            if (chrome.runtime.lastError) {
                /* Report any error */
                alert('ERROR:\n' + chrome.runtime.lastError.message);
            } else if ((selectedTextPerFrame.length > 0)
                    && (typeof(selectedTextPerFrame[0]) === 'string')) {
                /* The results are as expected, 
                 * populate the "search-query" input field */
                inp.value = selectedTextPerFrame[0].trim();
            }
        });
    });