我有一个完整的CSS属性的变量,我想用它来创建CSS文件并将其保存到应用程序文件目录中。我将如何在一个Chrome打包的应用程序中解决这个问题?使用Chrome打包的应用程序将文件保存到文件系统
1
A
回答
5
你不打算喜欢这个答案。你无法做到这一点,如果你想出了一个办法,那么Chrome团队将被视为一个安全漏洞。
打包应用程序的部分设计目标是在上传到网上商店时使整个应用程序可以静态分析。这意味着,当用户决定是否从商店安装应用程序时,该决定基于代码的实际作用(它包含这些脚本,此CSS和这些图像,并要求获得这些权限),而是而不是您是否信任开发人员或网站。 www.example.com今天可能看起来值得信赖,但明天它可能会出售给新的所有者,或者受到损害。所以决定“我信任example.com吗?”很难。打包应用程序使决策更容易;在大多数情况下,您信任的“事物”就在您的面前,就在您刚刚下载的CRX中。
如果你了解这个设计目标,那么你就明白为什么打包应用程序的设计不允许自修改代码(这是你想要做的通用术语)。如果你的代码可以生成代码,那么静态分析就很难确定应用程序可以做什么(有意或者是通过bug)。同样,内容安全策略对打包的应用程序也相当严格,不能设置为限制较少的策略,这就是eval()在脚本中不起作用的原因。
您的JavaScript无法设置您的DOM元素的样式属性是否有原因?这应该给你灵活性,而不会碰到平台安全模型的边界。
编辑:刚看到your other question,这看起来很像这个。你在建立一个CSS编辑器吗?还是你想修改你自己的应用程序的CSS?我上面的答案假设了第二种情况。如果我误解了你的问题,然后澄清,我会尝试改进答案。
3
虽然@潮虫的答案是技术上纠正,你不能改变你的应用程序打包内容,在OP仍然能达到什么本质上是一样的。
保存CSS:
var someCSSCode = 'a { color:#de0 }';
webkitRequestFileSystem(PERSISTENT, 1024*1024, function(fileSystem) {
fileSystem.root.getFile('my.css', {create:true}, function(file) {
file.createWriter(function(writer) {
this.onwriteend = function() {
this.onwriteend = null;
this.truncate(this.position); //in case a longer file was already here
};
writer.write(new Blob([someCSSCode], {type:'text/plain'}));
});
});
});
加载CSS:
webkitRequestFileSystem(PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile('my.css', {}, function(file) {
var elem = document.createElement('link');
elem.rel = 'stylesheet';
elem.type = 'text/css';
elem.href = file.toURL();
document.head.appendChild(elem); //or document.body
});
});
请注意,此代码不包含任何错误处理。
相关问题
- 1. 使用Chrome打包的应用程序/扩展程序将文本保存为文本文件
- 2. 保存或在沙盒文件系统中的Chrome应用
- 3. 将pdf保存到文件系统
- 4. UWP应用程序试图将文件保存到文件夹
- 5. 将文件保存到MyDocuments +应用程序文件夹
- 6. 将html文件保存到本地系统使用ASP.NET
- 7. 如何将文件系统的内容保存到文件中
- 8. Chrome应用程序文件系统在Kiosk模式
- 9. 如何在Chrome打包的应用程序上下载文件?
- 10. 将n从文件系统拖放到Web应用程序
- 11. 使用werkzeug在文件系统上保存文件
- 12. 将文件保存在应用程序文件夹中
- 13. 保存到本地Flex Web应用程序后打开文件
- 14. 应用程序文件系统中的隐藏文件夹
- 15. 从Chrome打包应用程序写入文件
- 16. Chrome应用程序Javascript:将文本另存为DOCX文件
- 17. 在Rails应用程序的文件系统中打开pdf文件
- 18. 将Word文档添加到Word应用程序而不保存到文件系统
- 19. 如何使用Java程序将文件从Linux系统复制到Windows系统?
- 20. 调整大小的UIImage并保存我的应用程序文件系统
- 21. 使用SQLite Chrome打包应用程序?
- 22. 如何保存PDF和视频文件到设备的文件系统,而不是应用程序目录
- 23. 保存文件宿主应用程序
- 24. 用于访问本地文件系统的Chrome应用程序的替代
- 25. 如何在Mozilla打开文件使用系统默认的应用程序
- 26. 如何将文件保存到ramdisk文件系统中的闪存?
- 27. 如何将JDeveloper 11g应用程序保存到新文件夹?
- 28. iPhone应用程序没有将值保存到.plist文件
- 29. iPhone - UIImagePickerController - >将图像保存到应用程序文件夹
- 30. 如何将应用程序设置保存到文件?
真的很棒的信息。肯定地看着构建我的应用程序的错误方式。我正在构建一个CSS编辑器,但它需要是本地的。我真的不想学习一种新语言,并希望它成为基于桌面的独立应用程序。任何建议在下一步都会很棒。我一直在研究node-webkit,它使我能够在使用webkit浏览器时将文件提交到文件系统。 – darylhedley 2013-04-20 08:58:26
其实node-webkit真的很棒!我会建议任何人寻找类似的东西来看待这个。文档不是很好,但说实话并不需要,因为大部分工作都是用纯节点完成的。玩了一个小时后,我就可以覆盖现有的CSS文件并重新加载。 – darylhedley 2013-04-20 09:10:56
我明白了。听起来很好玩。如果您回到Chrome打包应用程序,则有三种不同的API用于编写文件:HTML5文件系统API,chrome.fileSystem和chrome.syncFileSystem。简而言之,铬。fileSystem适合读/写用户挑选的单个文件。 chrome.syncFileSystem删除了用户手势要求并添加了云同步,但如果您需要真正的文件供用户在其他地方使用并使用,则需要chrome.fileSystem将其从同步文件系统中导出。玩node-webkit! – sowbug 2013-04-20 15:31:40