I am looking for a way to select text on a website in Chrome and have a overlay/tooltip pop with content depending on the text selection.
Has anyone done this before
If nobody provides a better answer then you might look at how Google Dictionary extension does it (it would be hard as its code is minimized).
All you need to do is listen for mouse events:
For example, this might help you get started. More tweaks are needed, to figure out if you initiated the selection from down->up, right->left, etc (all directions). You can use the following code as a startup:
contentscript.js
// Add bubble to the top of the page.
var bubbleDOM = document.createElement('div');
bubbleDOM.setAttribute('class', 'selection_bubble');
document.body.appendChild(bubbleDOM);
// Lets listen to mouseup DOM events.
document.addEventListener('mouseup', function (e) {
var selection = window.getSelection().toString();
if (selection.length > 0) {
renderBubble(e.clientX, e.clientY, selection);
}
}, false);
// Close the bubble when we click on the screen.
document.addEventListener('mousedown', function (e) {
bubbleDOM.style.visibility = 'hidden';
}, false);
// Move that bubble to the appropriate location.
function renderBubble(mouseX, mouseY, selection) {
bubbleDOM.innerHTML = selection;
bubbleDOM.style.top = mouseY + 'px';
bubbleDOM.style.left = mouseX + 'px';
bubbleDOM.style.visibility = 'visible';
}
contentscript.css
.selection_bubble {
visibility: hidden;
position: absolute;
top: 0;
left: 0;
background:-webkit-gradient(linear, left top, left bottom, from(#2e88c4), to(#075698));
}
manifest.json
Change the matches portion to the domain you want to inject these content scripts.
...
...
"content_scripts": [
{
"matches": ["http://*/*"],
"css": ["main.css"],
"js": ["main.js"],
"run_at": "document_end",
"all_frames": true
}
...
...
If you want to style it to look like a bubble, Nicolas Gallagher did some awesome CSS3 demos for bubbles!
I wrote something similar to what you're asking about. I listened for the user to select text and when there was a selection, I displayed a list of links for things like "Note on Facebook", "Define", etc.
A day or two after I started to write it, I found that google was going to add context menu support in a future release so I didn't touch this until recently (when I converted to context menus).
Take a look at the code:
http://code.google.com/p/select-actions/source/browse/trunk/select_actions.js?r=4