Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展突出显示文本选择Chrome.tabs_Javascript_Html_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展突出显示文本选择Chrome.tabs

Javascript Chrome扩展突出显示文本选择Chrome.tabs,javascript,html,google-chrome-extension,Javascript,Html,Google Chrome Extension,我的chrome扩展有问题,。我有“制表符”权限,但我不知道如何在没有背景页面的情况下检索页面上选定的文本 (在几种可能的方法中)你可以像这样实现你想要的: 加载弹出窗口后,使用将一些代码插入选项卡的网页 从注入的代码中查找并返回所选文本 用返回的文本填充“搜索查询”输入字段 单击“搜索”按钮后,打开一个包含谷歌搜索结果的新选项卡 下面是一个示例扩展的源代码,该扩展正是这样做的: 在maifest.json中: { "manifest_version": 2, "name":

我的chrome扩展有问题,。我有“制表符”权限,但我不知道如何在没有背景页面的情况下检索页面上选定的文本 (在几种可能的方法中)你可以像这样实现你想要的:

  • 加载弹出窗口后,使用将一些代码插入选项卡的网页
  • 从注入的代码中查找并返回所选文本
  • 用返回的文本填充“搜索查询”输入字段
  • 单击“搜索”按钮后,打开一个包含谷歌搜索结果的新选项卡

  • 下面是一个示例扩展的源代码,该扩展正是这样做的:

    在maifest.json中:

    {
        "manifest_version": 2,
    
        "name":    "Test Extension",
        "version": "0.0",
    
        "browser_action": {
            "default_title": "Test Extension",
            "default_popup": "popup.html"
        },
    
        "permissions": [
            "<all_urls>"
        ],
    }
    
    <!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>
    
    /* 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();
            }
        });
    });
    

    为什么需要
    选项卡
    权限?你为什么不想要一个背景页呢?您的扩展应该如何工作(例如,它应该何时获得所选文本)?您希望在什么上下文中使用所选文本?你的舱单是什么样子的?请提供更多信息!因此,您需要在选项卡中选择一些文本,然后单击右上角的浏览器操作按钮,弹出窗口显示,输入字段填充所选文本。是吗?@ExpertSystem是的,从技术上讲,仅仅注入一个简单的变量脚本,然后将其返回到扩展名:var text=window.getSelection().toString()不是更容易吗;返回文本@AgentLeader 1:我真的不明白这有多容易(这是完全相同的方法,只是短了几行)。我选择使用的原因是为了防止冲突。在将代码注入网页JS上下文时,使用IIFE始终是一个很好的做法。@agentleader 1:BTW,您尝试过我建议的解决方案吗?如果它对你有用,请考虑接受/投票的答案。我不确定,但我的JS不起作用。我真的不记得为什么或者怎样了。你自己试过看它是否有效吗。另外,我已经提供了正在进行的扩展。@agentleader 1:是的,我自己也尝试过了,并且成功了(提供不起作用的示例代码的目的是什么)。我建议您自己尝试一下(仅限于我提供的代码),如果它有效,您可以将其合并到现有代码中。然后您就会知道,如果它停止工作,那么代码的其余部分就有问题了(您仍然可以接受/支持我的答案:)。