2010-07-09 2 views
1

Я использую схему JavaScript-прототипа. Я включил его в фрагмент кода javascript, который позволяет людям копировать и вставлять их на свои веб-сайты. Существует вероятность того, что на их веб-сайте уже включен Prototype, или они хотели бы включить фрагмент несколько раз. В обоих случаях Прототип будет определен дважды, и в результате IE7 не будет функционировать. Он скажет: «Объект не поддерживает это свойство или метод» практически для любого вызова функции библиотеки Prototype. Я попытался это:В том числе Prototype.js дважды вызывает конфликт в IE7

if (typeof(Prototype) === 'undefined') { 
    alert('including Prototype'); 
    // minified Prototype code here 
} 
alert('running my code'); 
// all my code here 

Когда я побежал это, только «в том числе прототип» был приведен в готовность, но «работает мой код» не получил извещение. Зачем?

ответ

1

только «включая прототип» был предупрежден, но «запуск моего кода» не получил предупреждения. Зачем?

Я не знаю, не видя кода - вы что-нибудь получаете в консоли ошибок JavaScript? - но одна из возможностей заключается в том, что что-то в коде полагалось на то, что оно находится в неприкрашенной глобальной области. Например, оператор function не может использоваться внутри if в стандартном ECMAScript. Что на самом деле происходит, если вы пытаетесь быть зависящим от браузера, но обычно он может переопределить ранее объявленную версию функции, даже если в предложении if нет оценки true.

Эта проблема может быть решена путем помещения Prototype в свой собственный блок <script>, который вставлен на страницу с помощью методов DOM или document.write перед выполнением основного скрипта. Однако:

Я включил его в фрагмент кода javascript, который я разрешаю копировать и вставлять на свои сайты.

Да, я действительно не сделал бы этого. Использование более чем одной широкомасштабной, интрузивной структуры, такой как Prototype или jQuery на одной странице, является рецептом конфликтов и потенциально трудно отлаживаемых проблем. (То же самое с двумя копиями/версиями одного и того же фрейма.)

Когда вы являетесь пассивным фрагментом, вы являетесь гостем в доме другого веб-мастера, нужно иметь как можно меньше места. ИМО означает, что вы не должны использовать какие-либо рамки.

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