13

我正在开发一个小的 GreaseMonkey 脚本,我想在其中嵌入一个 jQuery 插件(Markitup),以便该脚本是完全自包含的(图像 + js),除了由谷歌提供的 jQuery。

我找到了网站http://www.greywyvern.com/code/php/binary2base64,它说如果你对脚本进行 base64 编码,你可以使用 href 嵌入 javascript,就像从 CSS 中将图像作为 basse64 一样。

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

所以我尝试了,但根本无法让它工作,在 OS X 上使用 Firefox 3.0.5。

我整理了一个小测试页面来隔离问题,但也无法让它在该页面上工作。

<!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

4 回答 4

19

也许只是一个想法,但也许“href”应该是“src”。

于 2008-12-20T16:09:21.067 回答
5

如果您检查脚本标签语法,您会得到

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

在此处使用数据 URI 在 IE 6 中不起作用。

于 2008-12-20T16:09:52.610 回答
2

这很有趣,我正在处理完全相同的问题:制作一个 Greasemonkey 脚本以将 markItUp 添加到页面的所有文本区域。

现在,库脚本本身没有问题。无论如何,我不明白你为什么要将它作为 Base64 插入。正如所指出的,它会更大。
如果你愿意,你可以直接把它放在 GM 脚本中(有些人用 jQuery 这样做),或者动态添加 a<script src="someURL"></script>到文档中并等待加载(网上有很多这样的例子)(不方便:在保存文件的站点),或者,就像我目前正在尝试的那样,使用 GM 的最新(0.8)功能:

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

所需的 JS 文件会自动从本地副本加载到 GM 脚本中,速度快且始终可用。不要使用打包版本,它们在这里不起作用。我也遇到了 set.js 的问题,所以我直接在脚本中输入。
它运作良好,但我还没有样式和图标。
我认为,我必须将 miuStyle 文本放在网页中,然后对其进行更改,以便所有背景图像都指向 Photobucket 或类似服务器上托管的相同图像,并带有偏移量。我还没有找到一种使用本地图像(在 CSS 中)的方法,唉,即使使用 @resource。

唉,我的回答并没有解决你的问题(但约翰的话似乎是有效的),但它可能会让你找到另一个更简单的解决方案。

于 2008-12-20T17:58:44.450 回答
-4

Base-64 使文件更大,但它使其更具机器可读性,因此它实际上提高了页面速度。除非您想查看文件中的 50 行乱码,否则我绝对可以理解您为什么想要这个。仅供参考,我刚刚阅读了一项研究,base 64 实际上在移动设备上加载速度较慢,所以如果您的应用程序是重型移动设备,我会远离

于 2015-11-18T01:02:08.710 回答