Получить текущий URL-адрес из chrome.contextmenus, элементы.onClicked слушатель
Я создаю свое первое расширение Chrome, и мне нужна помощь. Я думаю, что все работает, кроме того, что я не могу получить текущий URL-адрес вкладки.
var menu = chrome.contextMenus.create({
"title": "extension",
"contexts": ["all"]
});
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var siteUrl = tabs[0].url;
});
chrome.contextMenus.onClicked.addListener(function(activeTab)
{
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var siteUrl = tabs[0].url;
});
var finalUrl = "http://example.com/";
finalUrl += encodeURI(siteUrl);
// Open the page up.
chrome.tabs.create(
{
"url" : finalUrl
}
);
});
кто-нибудь может мне помочь? Спасибо.
EDIT:
Спасибо за ваши ответы. Я заставил его работать, двигаясь
var finalUrl = "http://example.com/";
finalUrl += encodeURI(siteUrl);
// Open the page up.
chrome.tabs.create(
{
"url" : finalUrl
}
внутри
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var siteUrl = tabs[0].url;
});
4 ответов
требуемая информация предоставляется вам уже в обратном вызове onClicked
слушатель.
chrome.contextMenus.onClicked.addListener(function(info, tab) {
// The URL of the tab (if any)
var tabURL = tab && tab.url;
// The URL of the page (if the menu wasn't triggered in a frame)
var pageURL = info.pageUrl;
// The URL of the frame (if the menu was triggered in a frame)
var frameURL = info.frameUrl;
Е. Г. вы могли бы достичь того, чего вы хотите, как это:
манифест.в JSON:
{
"manifest_version": 2,
"name": "Test Extension",
"version": "0.0",
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"permissions": ["contextMenus"]
}
фон.js:
var baseURL = 'http://example.com/';
chrome.contextMenus.create({
id: 'myMenu', // <-- event-pages require an ID
title: 'Do cool stuff',
contexts: ['all']
}, function () {
/* It is always a good idea to look for errors */
if (chrome.runtime.lastError) {
alert('ERROR: ' + chrome.runtime.lastError.message);
}
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
/* Check which context-menu was triggered */
if (info.menuItemId === 'myMenu') {
/* Get the URL of the frame or (if none) the page */
var currentURL = info.frameUrl || info.pageUrl;
/* Open a new tab */
chrome.tabs.create({
url: baseURL + encodeURI(currentURL)
});
}
});
chrome.tabs.getCurrent(function(tab){
alert(tab.url);
});
или если вы находитесь в скрипте контента,
alert(document.location.href);
если вы используете сценарий контента, вы можете использовать
document.location.href
document.location
является объектом и может предоставить набор полезных фрагментов в URL
-
document.location.host
возвращает доменное имя ex:"http://www.google.com/" -
document.location.path
возвращает деталь после доменного имени -
document.location.hash
возвращает все, что после символа # в URL
функция:
function getCurrentUrl(callBackFuntion){
//you are in content scripts
if(null == chrome.tabs || null == chrome.tabs.query){
callBackFuntion(document.location.href);
}else{
//you are in popup
var queryInfo = {
active: true,
currentWindow: true
};
chrome.tabs.query(queryInfo, function(tabs) {
var tab = tabs[0];
callBackFuntion(tab.url);
});
}
}
вызов функции:
function alertUrl(url){
console.log("currentUrl : " + url);
}
getCurrentUrl(alertUrl);