Вставить javascript в качестве base64

Я работаю над небольшим GreaseMonkey script, где я хотел бы встроить плагин jQuery (Markitup), чтобы script был полностью автономным (images + js), за исключением jQuery, который подается из Google.

Я нашел сайт http://www.greywyvern.com/code/php/binary2base64, в котором говорится, что вы можете встраивать javascript с href, если base64 кодирует script, что очень похоже на показывая изображения как basse64 из CSS.

<script type="text/javascript" href="data:text/javascript;base64,dmFyIHNjT2JqMSA9IG5ldyBzY3Jv..."></script>

Итак, я попробовал это, но не смог заставить его работать вообще, используя Firefox 3.0.5 на OS X.

Я собрал небольшую тестовую страницу, чтобы изолировать проблему, но не смог заставить ее работать на этой странице.

<!DOCTYPE HTML>
<html>
   <head>
      <title>Title</title>
      <meta charset="utf-8">
   </head>
   <body>
      <script href="data:text/javascript;base64,YWxlcnQoJ2FzYWRhc2QnKTsK"></script> 
      <script>alert('a');</script>  
   </body>
</html>

Строка base64 (YWxlcnQoJ2FzYWRhc2QnKTsK) говорит alert('asadasd');, поэтому я должен получить два предупреждения, но единственное, что я вижу, - это второе, где предупреждение находится как текст внутри тега script.

Я делаю что-то неправильно или почему это не работает, никаких идей?

Ответ 1

возможно, просто мысль, но, возможно, "href" должен быть "src".

Ответ 2

Если вы проверите синтаксис тега script, вы получите

<script src="..."
        ^^^
        src NOT href

Использование URI данных здесь не работает в IE 6 btw.

Ответ 3

Что смешно, я работаю над той же проблемой: создание Greasemonkey script для добавления markItUp во все текстовые области страницы.

Теперь у меня нет проблемы с самой библиотекой script. Я не понимаю, почему вы хотите вставить его как Base64. Как указано, он будет больше.
Вы можете поместить его непосредственно в GM script, если хотите (некоторые делают это с помощью jQuery), или добавить динамически <script src="someURL"></script> в документ и дождаться загрузки (есть многочисленные примеры этого в Сети) (неудобства: создает трафик на сайтах, содержащих файлы), или, как я сейчас пытаюсь, используя последнюю (0.8) функцию GM:

// @require      jquery.js
// @require      markitup.js
// @resource     miuStyle style.css

Необходимые файлы JS автоматически загружаются в GM script из локальной копии, которая быстрая и всегда доступна. Не используйте упакованные версии, они здесь не работают. У меня также были проблемы с set.js, поэтому я просто ввел его прямо в script.
Он работает хорошо, но у меня нет стиля иконок.
Я должен поместить текст miuStyle на веб-страницу, я думаю, и изменить его, чтобы все фоновые изображения отображались на одном и том же изображении, размещенном на Photobucket или аналогичном, со смещением. Я не нашел способ использовать локальные изображения (в CSS), увы, даже с @resource.

Мой ответ не затрагивает вашу проблему, увы (но замечание Джона кажется действительно), но это может привести вас к другому, более простому решению.

Ответ 4

Base-64 делает файл более крупным, но делает его более понятным для машины, поэтому он фактически увеличивает скорость страниц. Я определенно могу понять, зачем вам это нужно, если вы не хотите посмотреть 50 строк тарабарщины в вашем файле. FYI, я только что прочитал исследование, что база 64 на самом деле загружается медленнее на мобильном телефоне, поэтому, если ваше приложение будет тяжелым мобильным, я бы держался подальше.