【问题标题】:getSelection.getRangeAt(0) in Google Chrome ExtensionGoogle Chrome 扩展中的 getSelection.getRangeAt(0)
【发布时间】:2017-11-30 19:50:52
【问题描述】:

我正在尝试确定所选文本在浏览器中的位置。我需要在所选文本上方显示工具提示的位置。我想如果我得到边界,我就能计算出它的中间值。 我摆弄了一下,在这里寻找建议,但找不到解决方案。

如果我没记错的话,这似乎是与谷歌浏览器有关的问题?

请注意,我正在尝试创建一个 chrome 扩展,因此无需测试它是否适用于 Firefox / IE ...

这是导致问题的所有代码:

var selection = window.getSelection();

// calculate the posiition of the selection
var oRange = selection.getRangeAt(0);
var oRect = oRange.getBoundingClientRect();
console.log(oRect);

(我试图参考这个例子here

错误是这样的:

background.js:20 未捕获的 DOMException:无法在“选择”上执行“getRangeAt”:0 不是有效索引。

如果 jQuery 可以做到这一点,我也不介意使用它,我不限于原生 JavaScript。

我的background.js

的完整代码
chrome.contextMenus.create({
    "title": "Übersetzen",
    "contexts": ["selection"],
    "onclick" : clickHandler
});

function clickHandler(e) {

    var translateUrl = "https://glosbe.com/gapi/translate?from=eng&dest=deu&format=json&phrase=" + encodeURI(e.selectionText.toLowerCase()) + "&pretty=true";
    $.getJSON(translateUrl, callback);
    // console.log(data.responseTex);
}

function callback(data) {
    var translation = data.tuc[0].phrase.text;
    var selection = document.getSelection();

     console.log(selection);


    // calculate the position of the selection
    var oRange = selection.getRangeAt(0);
    var oRect = oRange.getBoundingClientRect();
    console.log(oRect);
    var selection = "";

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        chrome.tabs.sendMessage(tabs[0].id, {translation: translation}, function(response) {});
    });
}

更新:当我直接在浏览器控制台中运行此代码时,它按预期工作(如果这作为提示有用)

更新2:也许这很重要:选择文本后,我打开上下文菜单(通过鼠标单击)并单击一个项目,但选择不应该受此影响。

Update3: 上面的代码在示例 HTML 页面中运行良好。我的背景脚本似乎得到了一个未填充的对象(所有值都为空)

更新 4:我添加了完整的代码供参考(我也尝试了chrome.tabs.executeScript - 但没有成功)

【问题讨论】:

    标签: javascript jquery google-chrome


    【解决方案1】:

    您需要在内容脚本中而不是在后台脚本中进行选择。尝试调用您的“onMessage”方法并在那里使用 var s = window.getSelection() 。如果您将其登录到控制台,它会按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2014-10-02
      • 2011-03-24
      • 1970-01-01
      • 2013-11-02
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多