问题 将javascript嵌入为base64


我正在研究一个小的GreaseMonkey脚本,我想在其中嵌入一个jQuery插件(Markitup),这样脚本完全自包含(images + 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'); 所以我应该得到两个警报,但我看到的唯一警报是第二个警报位于脚本标签内的文本。

我做错了什么或为什么这不起作用,任何想法?


9964
2017-12-20 15:22


起源

问题:为什么要对脚本进行base64编码?它使文件更大。 - some
其实,不知道。我只是尝试将整个jquery插件复制并粘贴到我的油脂猴脚本的底部,并且工作正常。猜猜你每天都学到东西,谢谢:) - Daniel Johansson
你为什么不把脚本放在脚本标签之间呢?不需要对它进行base64编码,它将减少字节数,更容易更新等... - some


答案:


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


13
2017-12-20 16:09



谢谢,网站上的例子是错误的,我从没想过要检查。 - Daniel Johansson


如果你检查脚本标记语法,你会得到

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

在这里使用数据URI在IE 6 btw中不起作用。


3
2017-12-20 16:09





这很有趣,我正在研究同样的问题:制作一个Greasemonkey脚本,将markItUp添加到页面的所有textareas中。

现在,我对库脚本本身没有任何问题。无论如何,我不明白为什么要将它作为Base64插入。正如所指出的那样,它会更大。
你可以直接把它放在GM脚本中(有些人用jQuery做),或动态添加 <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。

我的回答没有解决你的问题,唉(但约翰的评论似乎有效),但它可能会让你转向另一个更简单的解决方案。


1
2017-12-20 17:58



是的,我只是试图复制并粘贴整个markitup,并且运行正常。我已经使用了jquery的require,从谷歌服务,但是直接在脚本中包含markitup,因为我不想从我的服务器提供它。样式我附加了样式标记到头部和css base64中的图片。 - Daniel Johansson
提醒:@require仅在安装用户脚本时加载文件一次。之后,它将存在于其硬盘上的用户配置文件中,并且每次使用该脚本都不会对服务器造成任何影响。我怀疑我可以在CSS中使用base64编码图像,但我还没有看过语法。 - PhiLho


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


-3
2017-11-18 01:02