2011-01-06 22 views
5

Ho creato un'estensione Google Chrome che inserisce alcuni tag IMG nei siti. Questo tag img su: hover deve mostrare un cursore personalizzato. L'estensione usa jQuery come suo script principale iniettato. Ho provato i seguenti metodi:Cursore personalizzato estensione Chrome

1.

var cursor = 'url('+chrome.extension.getURL('icons/cursor.cur')+')'; 
$('#myImgId').css({ 
    'position': 'absolute', 
    'top':'5px', 
    'left':'5px', 
    'cursor':cursor 
}); 

questo è il migliore di lavoro. Sui siti più piccoli mostra il cursore. Sui siti di caricamento più lenti non è così. Ma su piccoli siti a volte fallisce.


2.

var cursor = 'url('+chrome.extension.getURL('icons/cursor.cur')+')';  
$('<style>#myImgId{cursor:'+cursor+'}</style>').appendTo('head'); 

Questo non ha fatto niente per niente.


3.

In manifest.json ho iniettato il css.

"content_scripts": [ 
{ 
    "matches": ["http://*/*"], 
    "css": ["css/style.css"], 
    "js": ["j/c.js", "j/s.js"] 
} 

il file CSS appena avuto il cursore: url (icone/cursor.cur) come non ho idea, come ottenere reali URL in un file css. Questo non funziona affatto. Penso che debba funzionare così, però non ho trovato il riferimento per questo su code.google.

risposta

2

come si è scoperto per farlo funzionare regola CSS dovrebbe essere scritto come: {cursor:url(...),default;}

Per il 3 ° metodo di provare questo in CSS

#myImgId { 
cursor:url('chrome-extension://[email protected]@extension_id__/icons/cursor.cur'); 
} 

(non funziona a causa di un bug)

+0

Questo è vicino per la verità. Da ciò ho trovato questo: http://code.google.com/chrome/extensions/i18n.html#overview-predefined dove vedo questo: "Nota: i file CSS degli script di contenuto non possono utilizzare messaggi predefiniti come @@ extension_id Per i dettagli, vedi bug 39899 ". Quindi deve funzionare ma ha un bug per ora. –

+1

@the_nakos L'ho appena provato e non funziona. Ma l'ho fatto funzionare con l'id dell'estensione hardcoding e aggiungendo ', default' a css:' cursor: url ('chrome-extension: //abc/icons/cursor.cur'), ​​default; '. Forse le tue altre soluzioni funzionerebbero anche con l'impostazione predefinita? – serg

+0

Funziona anche con il primo e il secondo metodo! Grazie mille! –

0

Non è necessario disporre di un'estensione di Chrome per questo; è una caratteristica standard dei CSS per poter cambiare il cursore quando si spostano gli elementi, inclusa la possibilità di cambiarli in un'immagine personalizzata.

Dovreste essere in grado di aggiungere solo qualcosa di simile alla tua CSS:

.myimage { cursor: url(icons/cursor.gif);} 

, senza dover fare alcuna scripting a tutti.

Tuttavia ci sono bug, stranezze e differenze di implementazione in questa funzione in una varietà di browser.

Il più grande capriccio di sapere è che Internet Explorer si aspetta che il file del cursore sia un file .cur, mentre tutti gli altri browser si aspettano un file di immagine normale (ad esempio un file .gif). Se vuoi che funzioni cross-browser, dovrai fornire due versioni della tua icona e utilizzare un test specifico del browser o un trucco nel tuo CSS per farlo scegliere quello giusto.

Una buona sintesi della funzione CSS cursor con le sue peculiarità e il supporto in vari browser può essere trovato qui: http://www.quirksmode.org/css/cursor.html

Questa pagina afferma anche che "l'immagine è distorta in Chrome". Questa potrebbe essere una brutta notizia per te, ma il test non è stato aggiornato per un po 'di tempo in modo che le informazioni si applichino a Chrome 5, quindi se ci fosse un bug lì potrebbe essere stato già risolto.

+0

Beh, per un'estensione Chrome, il comportamento di IE è irrilevante. –

+0

Hai perso il mio punto. Le mie estensioni posizionano l'immagine su ogni utente che visita il sito e quell'immagine deve avere un cursore personalizzato inserito nell'estensione. La sua parte dell'estensione e solo l'immagine generata dell'interno deve avere quel cursore. (Grazie per la risposta, il link che hai fornito tornerà utile sono sicuro :)) –

+0

@the_nakos - hai ragione; sembra che mi sia mancato quello che stavi cercando di fare. Mi dispiace per quello Sono contento che tu abbia trovato comunque utili le informazioni. – Spudley

0

Per aggiungere:

var css = 
'<Style id="myCursor">\n'+ 
' .myClass { cursor: url('+chrome.extension.getURL("Cursors/myCrossCursor.cur")+'), crosshair; }\n'+ 
'</Style>'; 
if ($("head").length == 0) { 
    $("body").before(css); 
} else { 
    $("head").append(css); 
} 

di ri Move:

$("#myCrossCursor").remove(); 

Non dimenticare di aggiungere il file cur al manifesto:

"web_accessible_resources": [ 
    "Cursors/myCrossCursor.cur", 
    ... 
Problemi correlati