上下文菜单未被扩展程序加载

时间:2014-03-22 19:34:58

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

我按照本教程了解如何在用户右键单击所选文本时创建上下文菜单,该菜单为用户提供了将文本发送到服务器的选项:

http://vikku.info/programming/chrome-extension/get-selected-text-send-to-web-server-in-chrome-extension-communicate-between-content-script-and-background-page.htm#Comments

以下是文件:

myscript.js 文件:

document.addEventListener('mouseup',function(event)
{

  var sel = window.getSelection().toString();
  alert('selection is '+sel)

  if(sel.length)
    chrome.extension.sendRequest({'message':'setText','data': sel},function(response){})
})

background.html 文件:

<script>

var seltext = null;

chrome.extension.onRequest.addListener(function(request, sender, sendResponse)
{
  switch(request.message)
  {
    case 'setText':
      window.seltext = request.data
    break;

    default:
      sendResponse({data: 'Invalid arguments'});
    break;
  }
});


function savetext(info,tab)
{
  var jax = new XMLHttpRequest();
  jax.open("POST","http://localhost/text/");
  jax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  jax.send("text="+seltext);
  jax.onreadystatechange = function() { if(jax.readyState==4) { alert(jax.responseText);  }}
}

alert('here')
var contexts = ["selection"];
for (var i = 0; i < contexts.length; i++)
{
  var context = contexts[i];
  chrome.contextMenus.create({"title": "Send to Server", "contexts":[context], "onclick": savetext});
}

</script>

manifest.json 文件:

<script>

var seltext = null;

chrome.extension.onRequest.addListener(function(request, sender, sendResponse)
{
  switch(request.message)
  {
    case 'setText':
      window.seltext = request.data
    break;

    default:
      sendResponse({data: 'Invalid arguments'});
    break;
  }
});


function savetext(info,tab)
{
  var jax = new XMLHttpRequest();
  jax.open("POST","http://localhost/text/");
  jax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  jax.send("text="+seltext);
  jax.onreadystatechange = function() { if(jax.readyState==4) { alert(jax.responseText);  }}
}

alert('here')
var contexts = ["selection"];
for (var i = 0; i < contexts.length; i++)
{
  var context = contexts[i];
  chrome.contextMenus.create({"title": "Send to Server", "contexts":[context], "onclick": savetext});
}

</script>

popup.html 文件:

<body>
Just a sample popup
</body>

<小时/> 在 myscript.js 中,每次触发document.addEventListener('mouseup',function(event)事件时都会调用函数mouseup,但我认为如果用户决定将请求发送到服务器,则应调用此函数。当用户右键单击所选文本时应触发上下文菜单,但我不知道为什么会发生这种情况?我需要将清单版本更新为2.

2 个答案:

答案 0 :(得分:1)

我不知道,如果我找对你了......用户选择文字,按下鼠标右键,然后你想做“某事”......

试试这个:

'点击鼠标右键

window.oncontextmenu = function ()
{
    showSelection();  // call a function or do something here
    return false;     // cancel the default right click mouse menu (necessary)
}
函数中的

'获取所选文本并执行某些操作

function showSelection()
{
    var sel = window.getSelection().toString();
    alert('selection is '+sel);
    .....
}

答案 1 :(得分:0)

我明白你的问题是上下文菜单没有解雇...因为你需要对你的清单做一些小改动

  1. 将manifest vesrion添加为2
  2. 将background_page更改为背景,这是一个键,值为{scripts:[“background.js”]}
  3. 创建一个名为background.js的新javascript文件,并复制背景中的脚本标签html.i添加了manifest和javascript。如果您发现任何困难,请告诉我。
  4. 清单:

    {
    "name": "Word Reminder",
    "version": "1.0",
    "manifest_version": 2,
    "description": "Word Reminder.",
    "browser_action": {
    "default_icon": "images/stick-man1.gif",
    "popup":"popup.html"
    },
    
    "background": {
    "scripts": ["background.js"]
    },
    
    "content_scripts": [
    {
    "matches": ["<all_urls>"],
    "js": ["js/myscript.js"]
    }
    ],
    
    "permissions": [
    "http://*/*",
    "https://*/*",
    "contextMenus",
    "tabs"
    ],
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src    'self'"
    
    }
    

    background.js(同一文件夹中的新文件应包含以下代码):

    var seltext = null;
    
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse)
    {
    switch(request.message)
    {
        case 'setText':
            window.seltext = request.data
        break;
    
        default:
            sendResponse({data: 'Invalid arguments'});
        break;
    }
    });
    
    
    function savetext(info,tab)
    {
    var jax = new XMLHttpRequest();
    jax.open("POST","http://localhost/text/");
    jax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    jax.send("text="+seltext);
    jax.onreadystatechange = function() { if(jax.readyState==4) {     alert(jax.responseText);  }}
    }
    
    var contexts = ["selection"];
    for (var i = 0; i < contexts.length; i++)
    {
    var context = contexts[i];
    chrome.contextMenus.create({"title": "Send to Server", "contexts":[context], "onclick": savetext});  
    }