2015-10-07 2 views
0

Я пытаюсь написать простой почтовый индекс (для Greasemonkey/Tampermonkey), но я не могу заставить его работать. Цель состоит в том, чтобы добавить ссылку, когда загружается страница, а затем изменить URL-адрес (href) всякий раз, когда срабатывает элемент mouseup(). Сгенерированный код использует новые атрибуты из объявленных элементов, поэтому их необходимо установить снова.Многоразовый код в usercript

Главное, что я пробовал, заключалось в том, чтобы обернуть код многократного использования в function run() { /* code */ } (с необходимыми настройками, чтобы сделать правильную вещь независимо от того, вызываются ли они при загрузке страницы или на мышь), но это возвращает ошибку, которая run() is not defined. Как я могу правильно использовать код в таком имени?

$(document).ready(function() { 
    // REUSABLE CODE 
    var projI=new OpenLayers.Projection("EPSG:900913"); 
    var projE=new OpenLayers.Projection("EPSG:4326"); 
    var center_lonlat=(/* variable declaration */); 
    var topleft=(/* variable declaration */); 
    var bottomright=(/* variable declaration */); 
    lat=Math.round(center_lonlat.lat * 1000000)/1000000; 
    lon=Math.round(center_lonlat.lon * 1000000)/1000000; 
    spn=/* variable declaration */; 
}); 

$(document).ready(function() { 
    $('div .olControlAttribution').append('<a id="WMEtoGMM" href=" \ 
     /* link here that uses above variables */"'+ \ 
     'target="_blank">Open new page</a>'); 
}); 

$('div .view-area.olMap #mouseupElement').mouseup(function() { 
    $('#WMEtoGMM').attr('href', 'URL HERE'); 
}); 
+0

это 'greasemonkey' и' 'tampermonkey' userscript'? –

+0

@JaromandaX Да, это правильно. – vaindil

+0

, и это делается на странице с загруженной jQueery и загруженной библиотекой OpenLayers? –

ответ

1

Как я понимаю вопрос, у вас есть код в документ-готов, что вы хотите, чтобы иметь возможность запустить в соответствии с требованиями после документа-готов.

Но, что более важно, вы хотите иметь возможность использовать результат этой функции многократного использования.

Так переместить код из в свою собственную функцию, которая возвращает объект и вызвать эту функцию, а именно:

function calc_values() { 
    // call this function something that makes more sense in the context 
    // REUSABLE CODE 
    var obj = {}; // create a new object to store the values 
    obj.projI=new OpenLayers.Projection("EPSG:900913"); 
    obj.projE=new OpenLayers.Projection("EPSG:4326"); 
    obj.center_lonlat=(/* variable declaration */); 
    obj.topleft=(/* variable declaration */); 
    obj.bottomright=(/* variable declaration */); 
    obj.lat=Math.round(center_lonlat.lat * 1000000)/1000000; 
    obj.lon=Math.round(center_lonlat.lon * 1000000)/1000000; 
    obj.spn=/* variable declaration */; 
    return obj; 
} 

$(document).ready(function() { 
    // this replaces the original doc-ready call, but doesn't look like it's needed 
    calc_values(); 
}); 

$(document).ready(function() { 
    var obj = calc_values(); 
    // you can now use obj.projI etc to generate your link 
    $('div .olControlAttribution').append('<a id="WMEtoGMM" href=" \ 
     /* link here that uses above variables */"'+ \ 
     'target="_blank">Open new page</a>'); 
}); 

$('div .view-area.olMap #mouseupElement').mouseup(function() { 
    var obj = calc_values(); 
    // you can now use obj.projI etc to generate your link 
    $('#WMEtoGMM').attr('href', 'URL HERE'); 
}); 
+0

Спасибо для этого я делал это намного сложнее, чем нужно. Теперь проблема заключается в том, что '$ (document) .ready()' запускается до использования 'obj' (элемент не определен). Я попытался использовать '$ (window) .load()', но код вообще не запускается. – vaindil

Смежные вопросы