制作.webloc文件

Yur*_*dak 18 macos cocoa macos-carbon objective-c

我正在编写一个程序(对于Mac OS X,使用Objective-C),我需要以编程方式创建一堆.webloc文件.

.webloc文件只是将URL从Safari的位置栏拖放到某个文件夹后创建的文件.

一般来说,我需要一种方法来在文件系统中创建指向Web中某个位置的项目.据我所知,在Mac OS X上应该使用.webloc文件.

那么,是否有可能制作一个.webloc文件,其中包含有效的URL和一些标题?

sch*_*hwa 22

它鲜为人知 - 但是weblocs还有一个简单的基于plist的文件格式.

当创建webloc文件,您不需要使用资源法的其他三个海报描述来拯救他们.你也可以写一个简单的plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>URL</key>
    <string>http://apple.com</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

二进制资源格式仍处于活动状态,如果要读取plist文件,则确保需要同时读取这两种文件格式.但是在编写文件时 - 使用基于plist的格式 - 它要容易得多.

  • 进一步澄清我之前的评论:我没有尝试过简单地双击文件打开它.我刚刚做了,并且可以使用仅限数据叉的webloc文件,该文件在Safari中打开URL.但正如我上面所说,将webloc文件拖延到Safari不起作用,它会显示一个空窗口.(另外,将文件拖到Safari书签窗口会创建一个书签,其中包含webloc文件的file:// URL,而不是webloc文件中包含的URL的书签.) (3认同)

Chr*_*son 7

一个.webloc文件没有在其数据叉什么; 相反,它将其引用的URL存储为其资源fork中的资源.您可以使用DeRez(1)工具在命令行上看到这一点

在这里,我运行了一个.webloc文件,我拖出了我的Safari地址栏来解决这个问题:

% DeRez "Desktop/Crafting .webloc file - Stack Overflow.webloc"
data 'drag' (128, "Crafting .webloc file -#1701953") {
    $"0000 0001 0000 0000 0000 0000 0000 0003"            /* ................ */
    $"5445 5854 0000 0100 0000 0000 0000 0000"            /* TEXT............ */
    $"7572 6C20 0000 0100 0000 0000 0000 0000"            /* url ............ */
    $"7572 6C6E 0000 0100 0000 0000 0000 0000"            /* urln............ */
};

data 'url ' (256, "Crafting .webloc file -#1701953") {
    $"6874 7470 3A2F 2F73 7461 636B 6F76 6572"            /* http://stackover */
    $"666C 6F77 2E63 6F6D 2F71 7565 7374 696F"            /* flow.com/questio */
    $"6E73 2F31 3436 3537 352F 6372 6166 7469"            /* ns/146575/crafti */
    $"6E67 2D77 6562 6C6F 632D 6669 6C65"                 /* ng-webloc-file */
};

data 'TEXT' (256, "Crafting .webloc file -#1701953") {
    $"6874 7470 3A2F 2F73 7461 636B 6F76 6572"            /* http://stackover */
    $"666C 6F77 2E63 6F6D 2F71 7565 7374 696F"            /* flow.com/questio */
    $"6E73 2F31 3436 3537 352F 6372 6166 7469"            /* ns/146575/crafti */
    $"6E67 2D77 6562 6C6F 632D 6669 6C65"                 /* ng-webloc-file */
};

data 'urln' (256, "Crafting .webloc file -#1701953") {
    $"4372 6166 7469 6E67 202E 7765 626C 6F63"            /* Crafting .webloc */
    $"2066 696C 6520 2D20 5374 6163 6B20 4F76"            /*  file - Stack Ov */
    $"6572 666C 6F77"                                     /* erflow */
};
Run Code Online (Sandbox Code Playgroud)

这可能需要是唯一的资源,还有的'url ''TEXT'ID 256的资源,而那些可能不要么需要资源名称.'urln'如果您想要包含URL指向的文档的标题,则该资源可能很方便.该'drag'资源告诉系统,这是一个剪辑文件,但我不能确定它是否需要存在于这个时代.

要使用资源和文件的资源分支,可以使用资源管理器 - Carbon的基础部分之一,它可以返回到原始Mac.但是,有一些资源管理器的Cocoa包装器,例如Nathan Day的NDResourceFork.


Nic*_*ley 7

.webloc文件(更一般地说,Internet位置文件)以一种格式编写,其定义可以追溯到Mac OS 8.x. 它是基于资源的,源自从拖动对象(如文本或图像)创建文件时获得的剪切格式.

写入的资源是'url '256和'TEXT'256,它们存储URL,并且可选地'urln'256,包含与URL相关联的文本. 'drag'128点到其他两个(或三个)资源.

NTWeblocFile是Cocoatech开源框架 CocoaTechFoundation(BSD许可)的一部分,支持从Objective-C编写这些文件.如果要分别为URL指定标题,则需要修改该类,以便将除URL以外的内容写入'urln'资源.

在Mac OS X 10.3及更高版本中,URL也会写入(也可能会写入)文件数据分叉中的属性列表.请参阅其他答案,了解其工作原理......


Yur*_*dak 5

另一种制作“网络快捷方式”的方法是.url这里已经提到的文件。
内容看起来像(比基于 plist xml 简单得多):

[InternetShortcut]
URL=http://www.apple.com/
Run Code Online (Sandbox Code Playgroud)

注意文件有 3 行,最后一行是空的。

有关 .url 文件格式的更多信息

  • 不幸的是,这些是由 Safari 处理的,而不是系统。这意味着 Safari 将尝试处理文件中的 URL,无论 Safari 是否是该 URL 方案的默认应用程序,或者它是否甚至可以处理该方案。 (2认同)