Встраивание javascript как base64
Я работаю над небольшим скриптом GreaseMonkey, где я хотел бы встроить плагин jQuery (Markitup), чтобы скрипт был полностью автономным (изображения + js), за исключением jQuery, который подается из google.
Я нашел сайт http://www.greywyvern.com/code/php/binary2base64 который говорит, что вы можете встроить javascript с href, если вы base64 кодируете скрипт, так же, как и изображения, как 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');
поэтому я должен получить два предупреждения, но единственный, который я вижу, - это второй, где предупреждение расположено как текст внутри тега скрипта.
Я что-то делаю не так или почему это не работает, какие-то идеи?
4 ответов
Если вы проверите синтаксис тега скрипта, вы получите
<script src="..."
^^^
src NOT href
использование URIs данных здесь не работает в IE 6 btw.
это забавно, я работаю над точно такой же проблемой: создание скрипта Greasemonkey для добавления markItUp ко всем текстовым областям страницы.
теперь у меня нет проблем с самим сценарием библиотеки. В любом случае, я не понимаю, почему вы хотите вставить его как Base64. Как уже отмечалось, он будет больше.
Вы можете поместить его непосредственно в скрипт GM, если хотите (некоторые люди делают это с помощью jQuery), или добавить динамически <script src="someURL"></script>
к документу и ждать загрузки (есть многочисленные примеры этого в Сети) (неудобство: создает трафик на сайтах, содержащих файлы), или, как я сейчас пытаюсь, используя последнюю (0.8) функцию GM:
// @require jquery.js
// @require markitup.js
// @resource miuStyle style.css
необходимые файлы JS автоматически загружаются в скрипт GM из локальной копии, которая является быстрой и всегда доступной. Не используйте упакованные версии, они здесь не работают. У меня также были проблемы с set.js поэтому я просто вставил прямо в сценарий.
Он работает хорошо, но у меня нет стиля или значков еще.
Я думаю, что должен поместить текст miuStyle на веб-страницу и изменить его так, чтобы все фоновые изображения ссылались на одно и то же изображение, размещенное на Photobucket или подобное, со смещением. Я не нашел способ использовать локальные изображения (в CSS), увы, даже с @resource.
Base-64 делает файл больше, но он делает его более машиночитаемым, поэтому он фактически увеличивает скорость страницы. Я определенно понимаю, зачем вам это нужно, если вы не хотите посмотреть на 50 строк тарабарщины в вашем файле. К вашему сведению, я только что прочитал исследование, что base 64 на самом деле загружается медленнее на мобильном телефоне, поэтому, если ваше приложение тяжелое, я бы держался подальше