2010-09-23 4 views
2

Этот код (см. Ниже) относится к проекту с открытым исходным кодом (SemanticScuttle) Я немного изменил исходный код, пытаясь преобразовать букмарклет, в «web usable» Javascript.Как можно улучшить этот фрагмент JavaScript?

Текущий статус: Google Chrome = работает отлично!

Fiefox = Функциональный, но открывается на вкладке полного размера вместо заданного размера.

IE = DOA = Не работает, пожалуйста, помогите ...

<script type="text/javascript"> 
var selection = ''; 
if (window.getSelection) { 
    selection = 'window.getSelection()'; 
} else if (document.getSelection) { 
    selection = 'document.getSelection()'; 
} else if (document.selection) { 
    selection = 'document.selection.createRange().text'; 
} 

document.write('<a href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');open(\'http://example.com/share/bookmarks.php/Energy?action=add&amp;popup=1&amp;address=\'+a+\'&amp;title=\'+t+\'&amp;description=\'+d,\'Site Name\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=885,height=765,left=\'+(screen.width-885)/2+\',top=\'+(screen.height-725)/2);void 0;"><img src="images/bar/book22_5.jpg" alt="Example Code" title="Example Code" /></a>'); 

</script> 

Поскольку он работает в Chrome и функции в Firefox, я действительно люблю, чтобы иметь возможность использовать его с ИЭ также. спасибо.

ответ

2

Соответствующая часть вашего кода (переформатирован & сокращенно) следующим образом:

open(urlToOpen, 'Site Name', options);

Это следует читать вместо:

open(urlToOpen, '_blank', options);

Проблема с каким вы используете функцию window.open(). IE думает, что вы пытаетесь открыть URL-адрес в целевом названии «Имя сайта». Если вы измените его на «_blank», он откроется в новом окне.

Проверьте раздел о параметре SNAME @ MSDN: http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx

+0

Привет, я не проверял, работает ли исходный букмарклет в IE. «Автоматически сгенерированный» код букмарклета размещает там имя сайта. Я в настоящее время тестирую все предложения, спасибо. –

+0

«IE думает, что вы пытаетесь открыть URL-адрес в целевом названии« Site Name », J. Farray, THANK YOU, для определения этой детали, теперь он работает. :) –

+0

В любое время. Рад, что это помогло ... – Farray

2
var selection; 
if (window.getSelection) { 
    selection = window.getSelection(); 
} else if (document.getSelection) { 
    selection = document.getSelection(); 
} else if (document.selection) { 
    selection = document.selection.createRange().text; 
} else { 
    selection = null; 
} 

if (selection !== null) { 
    // Do your thing i.e. take out the stuff within the document.write 
    // and have it execute from here. 
} 
+0

++ да, ОП необходимо не документировать больше писать, он уже в документе ;-) –

+0

тестирования прямо сейчас, спасибо вам –

+0

Привет Кристофера, когда я «слегка модифицировал исходный код букмарклета» цель была изображение с кликабельным соединением («закладка сейчас»). 1) При загрузке страницы нет выбора, но 2) Используя ваше предложение: selection = null (при загрузке страницы), поэтому связанное изображение не появляется. Спасибо –

1

Вы могли бы написать функцию, чтобы получить текущий выбор следующим образом, а затем вызвать его, когда вам это нужно:

function getSelectedText() { 
    // get the selection function 
    var selection = window.getSelection || document.getSelection 
         || document.selection; 

    if(selection) { 
     var range = selection.createRange; 
     if(range) { 
      selection = range(); 
     } 
     // do something with selection 
     return selection.text || selection(); 
    } 
    } 

Вышеуказанные работы во всех браузерах (IE, FF, Chrome)

Я не тестировал эту часть, но думаю, что если вы будете писать свой код по одной строке за раз, а затем присоединиться к ней, было бы легче отладить, вот пример (Предупреждение ! нуждается в тестировании):

var href = [ 
    'x=document;', 
    'a=encodeURIComponent(x.location.href);', 
    't=encodeURIComponent(x.title);', 
    'd=encodeURIComponent(getSelectedText());', // call doSelection here. 
    'url="http://example.com/share/bookmarks.php/Energy";', 
    'opts="modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=885,height=765,left=" + ((screen.width-885)/2) + ",top=" + ((screen.height-725)/2);', 
    'open(url + "?action=add&amp;popup=1&amp;address=" +a + "&amp;title="+ t + "&amp;description=" +d ,', 
     '"Site Name", opts);', 
    'void 0;' 
    ].join(""); 

document.write('<a href="' + href + '"><img src="images/bar/book22_5.jpg" alt="Example Code" title="Example Code" /></a>'); 
+0

Также тестируйте сейчас, спасибо –

+0

Спасибо за подробный ответ. Я многому научусь. :) –