-
Notifications
You must be signed in to change notification settings - Fork 37
/
manifest.html
1109 lines (946 loc) · 53.5 KB
/
manifest.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="stable/static/css/site.css" rel="stylesheet" type="text/css">
<link href="stable/static/css/print.css" rel="stylesheet" type="text/css" media="print">
<link href="stable/static/css/prettify.css" rel="stylesheet" type="text/css">
<link href="//www.google.com/images/icons/product/chrome-16.png" rel="icon" type="image/ico">
<title>格式:清单文件 - chrome插件中文开发文档(非官方)</title>
</head>
<body>
<a id="top"></a>
<div id="header">{Header content}</div>
<a id="gc-topnav-anchor"></a>
<div id="gc-topnav">
<h1>chrome插件中文开发文档(非官方)</h1>
<ul id="home" class="gc-topnav-tabs">
<li id="home_link">
<a href="index.html" title="Google Chrome Extensions home page">
<div>主页</div>
</a>
</li>
<li id="docs_link">
<a href="docs.html" title="Official Google Chrome Extensions documentation">
<div>文档</div>
</a>
</li>
<li id="faq_link">
<a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">
<div>常见问题</div>
</a>
</li>
<li id="samples_link">
<a href="samples.html" title="Sample Extensions (with source code)">
<div>示例</div>
</a>
</li>
<li id="group_link">
<a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">
<div>google群组(英文)</div>
</a>
</li>
<li id="so_link">
<a href="http://stackoverflow.com/questions/tagged/google-chrome-extension" title="[google-chrome-extension] tag on Stack Overflow">
<div>还有问题?(英文)</div>
</a>
</li>
</ul>
</div>
<div id="gc-container">
<div id="gc-sidebar">
<ul
class="level1 ">
<li class="level2">
<a href="getstarted.html" class="level2 ">入门</a>
</li>
<li class="level2">
<a href="overview.html" class="level2 ">概述</a>
</li>
<li class="level2">
<a href="whats_new.html" class="level2 ">新功能</a>
</li>
<li class="level2">
<a href="devguide.html" class="level2 ">开发者指南</a>
<ul
class="level2 ">
<li class="level3">
<a class="button level3">
<span class="level3">用户界面</span>
<div class="toggleIndicator level3"></div>
</a>
<ul toggleable
class="level3 hidden">
<li class="level4">
<a href="browserAction.html" class="level4 ">浏览器按钮</a>
</li>
<li class="level4">
<a href="contextMenus.html" class="level4 ">右键菜单</a>
</li>
<li class="level4">
<a href="notifications.html" class="level4 ">桌面通知</a>
</li>
<li class="level4">
<a href="omnibox.html" class="level4 ">多功能地址栏</a>
</li>
<li class="level4">
<a href="options.html" class="level4 ">选项页面</a>
</li>
<li class="level4">
<a href="override.html" class="level4 ">代替页面</a>
</li>
<li class="level4">
<a href="pageAction.html" class="level4 ">页面按钮</a>
</li>
</ul>
</li>
<li class="level3">
<a class="button level3">
<span class="level3">浏览器交互</span>
<div class="toggleIndicator level3"></div>
</a>
<ul toggleable
class="level3 hidden">
<li class="level4">
<a href="bookmarks.html" class="level4 ">书签</a>
</li>
<li class="level4">
<a href="cookies.html" class="level4 ">Cookies</a>
</li>
<li class="level4">
<a href="devtools.html" class="level4 ">开发人员工具</a>
</li>
<li class="level4">
<a href="events.html" class="level4 ">事件</a>
</li>
<li class="level4">
<a href="history.html" class="level4 ">历史记录</a>
</li>
<li class="level4">
<a href="management.html" class="level4 ">管理</a>
</li>
<li class="level4">
<a href="tabs.html" class="level4 ">标签页</a>
</li>
<li class="level4">
<a href="windows.html" class="level4 ">窗口</a>
</li>
</ul>
</li>
<li class="level3">
<a class="button level3">
<span class="level3">实现</span>
<div class="toggleIndicator level3"></div>
</a>
<ul toggleable
class="level3 hidden">
<li class="level4">
<a href="a11y.html" class="level4 ">辅助功能</a>
</li>
<li class="level4">
<a href="event_pages.html" class="level4 ">事件页面</a>
</li>
<li class="level4">
<a href="contentSecurityPolicy.html" class="level4 ">内容安全策略(CSP)</a>
</li>
<li class="level4">
<a href="content_scripts.html" class="level4 ">内容脚本</a>
</li>
<li class="level4">
<a href="xhr.html" class="level4 ">跨站XMLHttpRequest</a>
</li>
<li class="level4">
<a href="i18n.html" class="level4 ">国际化</a>
</li>
<li class="level4">
<a href="messaging.html" class="level4 ">消息传递</a>
</li>
<li class="level4">
<a href="permissions.html" class="level4 ">可选权限</a>
</li>
<li class="level4">
<a href="npapi.html" class="level4 ">NPAPI插件</a>
</li>
</ul>
</li>
<li class="level3">
<a class="button level3">
<span class="level3">完成</span>
<div class="toggleIndicator level3"></div>
</a>
<ul toggleable
class="level3 hidden">
<li class="level4">
<a href="hosting.html" class="level4 ">托管</a>
</li>
<li class="level4">
<a href="external_extensions.html" class="level4 ">其他部署方案</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="level2">
<a href="tutorials.html" class="level2 ">教程</a>
<ul
class="level2 ">
<li class="level3">
<a href="tut_migration_to_manifest_v2.html" class="level3 ">清单文件V2</a>
</li>
<li class="level3">
<a href="tut_debugging.html" class="level3 ">调试</a>
</li>
<li class="level3">
<a href="tut_analytics.html" class="level3 ">Google Analytics(分析)</a>
</li>
<li class="level3">
<a href="tut_oauth.html" class="level3 ">OAuth</a>
</li>
</ul>
</li>
<li class="level2">
<span class="level2">参考</span>
<ul
class="level2 ">
<li class="level3">
<a class="button level3">
<span class="level3">格式</span>
<div class="toggleIndicator level3"></div>
</a>
<ul toggleable
class="level3 hidden">
<li class="level4">
<a href="manifest.html" class="level4 ">清单文件</a>
</li>
<li class="level4">
<a href="match_patterns.html" class="level4 ">匹配表达式</a>
</li>
</ul>
</li>
<li class="level3">
<a href="permission_warnings.html" class="level3 ">权限警告</a>
</li>
<li class="level3">
<a href="api_index.html" class="level3 ">chrome.* APIs</a>
</li>
<li class="level3">
<a href="api_other.html" class="level3 ">其他APIs</a>
</li>
</ul>
</li>
<li class="level2">
<span class="level2">更多</span>
<ul
class="level2 ">
<li class="level3">
<a href="http://code.google.com/chrome/webstore/docs/index.html" class="level3 ">chrome商店</a>
</li>
<li class="level3">
<a href="http://code.google.com/chrome/apps/docs/developers_guide.html" class="level3 ">托管应用程序</a>
</li>
<li class="level3">
<a href="themes.html" class="level3 ">主题</a>
</li>
</ul>
</li>
</ul>
</div>
<div id="gc-pagecontent">
<h1 class="page_title">格式: 清单文件</h1>
<div id="toc">
<h2>内容</h2>
<ol>
<li>
<a href="#overview">字段概述 </a>
</li>
<li>
<a href="#field_details">字段详情</a>
<ol>
<li><a href="#app">app</a></li>
<li><a href="#default_locale">default_locale</a></li>
<li><a href="#description">description</a></li>
<li><a href="#homepage_url">homepage_url</a></li>
<li><a href="#icons">icons</a></li>
<li><a href="#incognito">incognito</a></li>
<li><a href="#intents">intents</a></li>
<li><a href="#key">key</a></li>
<li><a href="#minimum_chrome_version">minimum_chrome_version</a></li>
<li><a href="#name">name</a></li>
<li><a href="#nacl_modules">nacl_modules</a></li>
<li><a href="#offline_enabled">offline_enabled</a></li>
<li><a href="#permissions">permissions</a></li>
<li><a href="#requirements">requirements</a></li>
<li><a href="#version">version</a></li>
<li><a href="#manifest_version">manifest_version</a></li>
<li><a href="#web_accessible_resources">web_accessible_resources</a></li>
<li><a href="#sandbox">sandbox</a></li>
</ol>
</li>
</ol>
</div>
<p>
每一个扩展程序、可安装的网络应用程序以及主题背景都有一个
<a href="http://www.json.org">JSON</a>格式的清单文件,名为<code>manifest.json</code>,
提供重要信息。
</p>
<h2 id="overview">字段概述 </h2>
<p>
如下代码展示了支持的清单文件字段,以及讨论每一个字段的链接。只有 <b>name</b> 和 <b>version</b>字段是必需的。
</p>
<pre>
{
<em>// 必选</em>
"<a href="#name">name</a>": "<em>我的扩展程序</em>",
"<a href="#version">version</a>": "<em>版本字符串</em>",
"<a href="#manifest_version">manifest_version</a>": 2,
<em>// 推荐</em>
"<a href="#description">description</a>": "<em>纯文本描述</em>",
"<a href="#icons">icons</a>": { ... },
"<a href="#default_locale">default_locale</a>": "<em>en</em>",
<em>// 从中选一个(或者没有)</em>
"<a href="browserAction.html">browser_action</a>": {...},
"<a href="pageAction.html">page_action</a>": {...},
"<a href="themes.html">theme</a>": {...},
"<a href="#app">app</a>": {...},
<em>// 添加您需要的</em>
"<a href="event_pages.html">background</a>": {"persistent": false, ...},
"<a href="background_pages.html">background</a>": {"persistent": true, ...},
"<a href="override.html">chrome_url_overrides</a>": {...},
"<a href="content_scripts.html">content_scripts</a>": [...],
"<a href="../extensions/contentSecurityPolicy.html">content_security_policy</a>": "<em>policyString</em>",
"<a href="fileBrowserHandler.html">file_browser_handlers</a>": [...],
"<a href="#homepage_url">homepage_url</a>": "http://<em>path/to/homepage</em>",
"<a href="#incognito">incognito</a>": "spanning" <em>or</em> "split",
"<a href="#intents">intents</a>": {...}
"<a href="#key">key</a>": "<em>publicKey</em>",
"<a href="#minimum_chrome_version">minimum_chrome_version</a>": "<em>versionString</em>",
"<a href="#nacl_modules">nacl_modules</a>": [...],
"<a href="#offline_enabled">offline_enabled</a>": true,
"<a href="omnibox.html">omnibox</a>": { "keyword": "<em>aString</em>" },
"<a href="options.html">options_page</a>": "<em>aFile</em>.html",
"<a href="#permissions">permissions</a>": [...],
"<a href="npapi.html">plugins</a>": [...],
"<a href="#requirements">requirements</a>": {...},
"<a href="autoupdate.html">update_url</a>": "http://<em>path/to/updateInfo</em>.xml",
"<a href="#web_accessible_resources">web_accessible_resources</a>": [...],
"<a href="#sandbox">sandbox</a>": [...]
}
</pre>
<h2 id="field_details">字段详情</h2>
<p>
这一部分包含了其它页面中没有描述的字段。有关字段的完整列表以及指向描述它们细节的页面链接,请参见
<a href="#overview">字段概述</a>。
</p>
<h3 id="app">app</h3>
<p>
用于<a href="http://developer.chrome.com/trunk/apps/app_lifecycle.html#eventpage">打包应用程序</a>
,指定应用程序的后台脚本;
也用于<a href="https://developers.google.com/chrome/apps/docs/developers_guide#live">托管应用程序</a>
,指定应用程序使用的URL。
</p>
<h3 id="default_locale">default_locale</h3>
<p>指定<code>_locales</code>中的子目录,包含该扩展程序默认字符串。对于含有<code>_locales</code>目录的扩展程序来说这一属性是<b>必需的</b>,在没有<code>_locales</code>目录的扩展程序中该属性<b>不能存在</b>。有关更多细节,请参见<a href="i18n.html">国际化支持</a>。</p>
<h3 id="description">description</h3>
<p>
描述该扩展程序的纯文本字符串(不能包含HTML或其它格式化内容,不要超过132个字符)。描述应该同时适合在浏览器的扩展程序管理用户界面以及
<a href="https://chrome.google.com/webstore">Chrome网上应用店</a>中显示。您可以在该字段中指定语言相关的字符串,有关细节请参见
<a href="i18n.html">国际化支持</a>。
</p>
<h3 id="homepage_url">homepage_url</h3>
<p>
该扩展程序的主页URL。扩展程序管理页面(chrome://extensions或chrome://settings/extensionSettings)将包含指向该URL的链接。如果您
<a href="hosting.html">在您自己的网站上托管扩展程序</a>,该属性将十分有用。如果您通过
<a href="https://chrome.google.com/webstore">Chrome网上应用店</a>发布您的扩展程序,主页URL默认为扩展程序自己的页面。
</p>
<h3 id="icons">icons</h3>
<p>
一个或多个代表扩展程序、应用程序或主题背景的图标。您应该确保提供一个128×128大小的图标,用与安装过程中以及Chrome网上应用店。扩展程序同时应该提供一个48×48大小的图标,用于扩展程序管理页面(chrome://extensions或chrome://settings/extensionSettings)。您也可以再指定一个16×16大小的图标,用于扩展程序页面的收藏夹图标,16×16的图标也将显示在实验性的扩展程序
<a href="experimental.infobars.html">信息栏</a>
中。
</p>
<p>
通常图标应该使用PNG格式,因为PNG格式对透明度的支持最佳。但图标也可以是其它任何WebKit支持的格式,包括BMP、GIF、ICO和JPEG。如下是一个指定图标的例子:
</p>
<pre>
"icons": { "16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png" },
</pre>
<p class="note">
<b>重要提示:</b>
只能使用文档中规定的图标大小。
<br>
<br>
您可能注意到Chrome有时候会缩小这些图标。例如,安装对话框可能将128像素的图标缩小至69像素。
<br>
<br>
然而,Chrome浏览器用户界面的细节可能会在不同版本间更改,并且这些更改假定开发者使用了文档中规定的大小。如果您使用其它大小,您的图标在将来版本的浏览器中可能会看起来效果不佳。
</p>
<p>
如果您使用
<a href="https://chrome.google.com/webstore/developer/dashboard">Chrome开发者信息中心</a>上传您的扩展程序、应用程序或主题背景,您还需要上传额外的图像,包括至少一张您的扩展程序的屏幕截图。有关更多信息,请参见
<a href="http://code.google.com/chrome/webstore/">CChrome网上应用店开发者文档</a>。
</p>
<h3 id="incognito">incognito</h3>
<p>
可以是"spanning"或"split",指定该扩展程序如果允许在隐身模式中运行时会如何表现。
</p>
<p>
对于扩展程序来说默认值为"spanning",意味着扩展程序将会在单个共享进程中运行,任何来自隐身标签页的事件或消息都将发送至共享的进程,以
<em>incognito</em>标志指示它的来源。由于隐身标签页无法使用这一共享进程,使用"spanning"隐身模式的扩展程序不能将扩展程序包中的页面载入到隐身标签的主框架。
</p>
<p>
对于可安装的网络应用程序来说默认值为"split",意味着隐身窗口中的所有应用程序页面将会在它们自己的隐身进程中运行。如果应用程序或扩展程序包含后台页面,它们也会在隐身进程中运行。隐身进程与普通进程同时运行,但是使用单独的仅保留在内存中的Cookie存储区。每一个进程只能接收到来自它自己上下文的事件与消息(例如,隐身进程只会看到隐身标签页的更新)。两个进程之间无法互相通信。
</p>
<p>
选择的准则是,如果您的扩展程序或者应用程序需要在隐身模式下载入标签页,使用
<em>split</em>隐身行为。如果您的扩展程序或应用程序需要登录远程服务器或者在本地保留设置,使用<em>spanning</em>
隐身模式。
</p>
<h3 id="intents">intents</h3>
<p>
指定这一扩展程序或应用程序提供的所有Intent处理程序的词典,词典中的每一个键指定这一扩展程序处理的动作谓语。以下例子为动作谓语
"<a href="http://webintents.org/share">http://webintents.org/share</a>"指定两个处理程序。
</p>
<pre>
{
"name": "测试",
"version": "1",
"intents": {
"http://webintents.org/share": [
{
"type": ["text/uri-list"],
"href": "/services/sharelink.html",
"title" : "Sample Link Sharing Intent",
"disposition" : "inline"
},
{
"type": ["image/*"],
"href": "/services/shareimage.html",
"title" : "Sample Image Sharing Intent",
"disposition" : "window"
}
]
}
}
</pre>
<p>
"type"的值为这一处理程序支持的MIME类型数组,"href"指示处理该Intent的页面URL。对于托管应用程序,这些URL必须包含在允许的URL中。对于扩展程序,所有URL必须在扩展程序中,并且认为相对于扩展程序根URL。
</p>
<p>
当用户执行这一处理程序的操作时"title"将在Intent选择器用户界面中显示。
</p>
<p>
"disposition"可以为"inline"或"window"。使用"window"方式的Intent调用时将打开新标签页,而使用"inline"方式调用时会显示在Intent选择器中。
</p>
<p>
有关Intent的更多信息,请参考<a href="http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html">Web Intents规范</a>与<a href="http://www.webintents.org">webintents.org</a>。
</p>
<h4 id="content_types">通过Intent处理内容类型</h4>
<p>
Web Intents可以注册为内容类型的查看器,如果要这么做,动作谓语必须为 <a href="http://webintents.org/view">"http://webintents.org/view"</a>,内容类型必须为白名单中的MIME类型。
</p>
<table>
<tr>
<th>加入白名单中的MIME类型</th>
</tr>
<tr>
<td>application/rss+xml</td>
</tr>
<tr>
<td>application/atom+xml</td>
</tr>
</table>
<h3 id="key">key</h3>
<p>
这一值用来控制在开发过程中载入的扩展程序、应用程序或主题背景的唯一标识符。
</p>
<p class="note">
<b>注意:</b>通常您不需要使用这一值。相反,您应该使用
<a href="overview.html#relative-urls">相对路径</a>
以及<a href="extension.html#method-getURL">chrome.extension.getURL()</a>来编写不依赖这一值的代码。
</p>
<p>
要获得合适的键值,首先从<code>.crx</code>文件安装您的扩展程序(您可能需要
<a href="https://chrome.google.com/webstore/developer/dashboard">上传您的扩展程序</a>
或<a href="packaging.html">手工打包</a>)。然后,在您的
<a href="http://www.chromium.org/user-experience/user-data-directory">配置文件目录</a>,查看如下文件:
<code>Default/Extensions/<em><extensionId></em>/<em><versionString></em>/manifest.json</code>,
您将会看到填在此处的键值。
</p>
<h3 id="minimum_chrome_version">minimum_chrome_version</h3>
<p>
您的扩展程序、应用程序或主题背景需要的Chrome浏览器版本,如果有任何要求的话。该字符串的格式与
<a href="#version">version</a> 字段相同。
<h3 id="name">name</h3>
<p>
一个较短的纯文本字符串(不超过45个字符)标志该扩展程序。名称将在安装对话框、扩展程序管理用户界面以及
<a href="https://chrome.google.com/webstore">Chrome网上应用店</a>.
中使用。您可以为该指定语言相关的字符串,有关细节请参见<a href="i18n.html">国际化支持</a>。
</p>
<h3 id="nacl_modules">nacl_modules</h3>
<p>
一个或多个从MIME类型至Native Client模块的映射,用来处理这些类型。例如,如下片段中的加粗代码将一个Native Client模块注册为OpenOffice电子表格MIME类型的内容处理器。
</p>
<pre>
{
"name": "Native Client OpenOffice 电子表格查看器",
"version": "0.1",
"description": "直接在您的浏览器中打开 OpenOffice 电子表格。",
<b>"nacl_modules": [{
"path": "OpenOfficeViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet"
}]</b>
}
</pre>
<p>
"path"的值为扩展程序目录中Native Client清单文件(一个<code>.nmf</code>文件)的位置。有关Native Client以及
<code>.nmf</code>文件的更多信息,请参见
<a href="http://code.google.com/chrome/nativeclient/docs/technical_overview.html">Native Client技术概述</a>.
</p>
<p>
每一个MIME类型只能与一个<code>.nmf</code>文件关联,但是一个<code>.nmf</code>文件可以处理多个MIME类型。如下例子演示一个扩展程序,含有两个<code>.nmf</code>文件,处理三种MIME类型。
</p>
<pre>
{
"name": "电子表格查看器",
"version": "0.1",
"description": "直接在您的浏览器中打开 OpenOffice 和 Excel 电子表格。",
"nacl_modules": [{
"path": "OpenOfficeViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet"
},
{
"path": "OpenOfficeViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet-template"
},
{
"path": "ExcelViewer.nmf",
"mime_type": "application/excel"
}]
}
</pre>
<p class="note">
<strong>注意:</strong>
您不指定"nacl_modules"也能在扩展程序中使用Native Client模块,只有当您需要浏览器使用您的Native Client模块显示特定类型的内容时才需要使用"nacl_modules"。
</p>
<h3 id="offline_enabled">offline_enabled</h3>
<p>
应用程序或者扩展程序能否在离线状态下工作。当Chrome浏览器检测到处于离线状态时,这一属性设为true的应用程序会在新标签页面中高亮显示。
</p>
<h3 id="permissions">permissions</h3>
<p>
扩展或应用程序可能会使用到的一组权限。
每一个权限既可以是已知字符串列表中的某一个(例如"geolocation"),也可以是授予访问一个或多个主机权限的匹配表达式。权限可以帮助您在扩展程序或应用程序受到攻击时尽可能减小损失,某些权限也会在安装前向用户显示,这些将在
<a href="permission_warnings.html">权限警告</a>中详细描述。
</p>
<p>
如果某个API需要您在清单文件中声明某个权限,它的文档会告诉你如何去做。例如,
<a href="tabs.html">标签</a>页面
会向您演示如何声明"tabs"权限。
</p>
<p class="note">
<b>注意:</b>
在Chrome 16后, 一些权限是可选的。
请查看
<a href="permissions.html">可选权限</a>了解更多详情。
</p>
<p>
如下是一个扩展程序清单文件的权限部分的例子:
</p>
<pre>
"permissions": [
"tabs",
"bookmarks",
"http://www.blogger.com/",
"http://*.google.com/",
"unlimitedStorage"
],
</pre>
<p>
下面表格中列出的权限只能在扩展或者打包的应用程序中可以使用。
</p>
<p class="note">
<strong>注意:</strong>
托管应用程序只能使用
"background", "clipboardRead", "clipboardWrite", "geolocation", "notifications",
及 "unlimitedStorage"权限,而不能使用下表列出的所有其它权限
</p>
<table>
<tr>
<th>权限</th>
<th>描述 </th>
</tr>
<tr>
<td><em>匹配表达式</em> </td>
<td>指定<em>主机权限</em>。如果扩展程序或应用程序需要与页面上运行的代码交互则必须指定该权限。许多扩展程序的能力,例如
<a href="xhr.html">跨站XMLHttpRequest</a>,
<a href="content_scripts.html#pi">以编程方式插入内容脚本</a>以及<a href="cookies.html">the cookies API</a>
需要主机权限。有关语法上的细节,请参见
<a href="match_patterns.html">匹配表达式</a>。
</td>
</tr>
<tr id="bg">
<td>"background" </td>
<td>
<p>
让Chrome很早就启动很晚才退出,以便应用程序和扩展程序可以有更长的生命周期。
</p>
<p>
当任何已安装的托管应用程序、打包应用程序或扩展程序拥有"background"权限时,Chrome浏览器在用户登录计算机时就(不可见地)运行,那时用户还没有亲自执行Chrome浏览器。"background"权限也使Chrome浏览器继续运行(即使在最后一个窗口已经关闭后),直到用户主动退出Chrome浏览器。
</p>
<p class="note">
<b>注意:</b>
已禁用的应用程序以及扩展程序以未安装对待。
</p>
<p>
通常您与
<a href="background_pages.html">后台页面</a>,
<a href="event_pages.html">事件页面</a>
或者(对于托管应用程序)
<a href="http://code.google.com/chrome/apps/docs/background.html">后台窗口</a>一起使用"background"权限。
</p>
</td>
</tr>
<tr>
<td>"bookmarks" </td>
<td>如果扩展程序使用
<a href="bookmarks.html">chrome.bookmarks</a>模块则必须指定该权限。</td>
</tr>
<tr>
<td>"chrome://favicon/" </td>
<td>如果扩展程序使用chrome://favicon/<em>url</em>"机制来显示页面的收藏夹图标则必须指定。例如,要显示http://www.google.com/的收藏夹图标,您声明"chrome://favicon/"权限,并使用如下所示的HTML代码:
<pre><img src="chrome://favicon/http://www.google.com/"></pre>
</td>
</tr>
<tr>
<td>"clipboardRead" </td>
<td>如果扩展程序或应用程序使用
<code>document.execCommand('paste')</code>则必须指定。 </td>
</tr>
<tr>
<td>"clipboardWrite" </td>
<td>表示扩展程序或应用程序可以使用
<code>document.execCommand('copy')</code>或
<code>document.execCommand('cut')</code>.。<b>托管应用程序必须</b>
指定该权限,同时建议扩展程序和打包应用程序指定该权限。
</td>
</tr>
<tr>
<td>"contentSettings" </td>
<td>如果扩展程序使用
<a href="contentSettings.html">chrome.contentSettings</a>模块则必须指定。</td>
</tr>
<tr>
<td>"contextMenus" </td>
<td>如果扩展程序或应用程序使用
<a href="contextMenus.html">chrome.contextMenus</a>模块则必须指定。</td>
</tr>
<tr>
<td>"cookies" </td>
<td>如果扩展程序使用
<a href="cookies.html">chrome.cookies</a>模块则必须指定。</td>
</tr>
<tr>
<td>"experimental" </td>
<td>如果扩展程序或应用程序使用
<a href="http://code.google.com/chrome/extensions/dev/experimental.html">chrome.experimental.* APIs</a>则必须指定。</td>
</tr>
<tr>
<td id="fileBrowserHandler">"fileBrowserHandler" </td>
<td>如果扩展程序使用
<a href="fileBrowserHandler.html">fileBrowserhandler</a>模块则必须指定。</td>
</tr>
<tr>
<td id="geolocation">"geolocation" </td>
<td>允许扩展程序或应用程序使用提出的HTML5
<a href="http://dev.w3.org/geo/api/spec-source.html">地理位置API</a>
而不用提示用户。</td>
</tr>
<tr>
<td>"history" </td>
<td>如果扩展程序使用
<a href="history.html">chrome.history</a>模块则必须指定。</td>
</tr>
<tr>
<td>"idle" </td>
<td>如果扩展程序或应用程序使用
<a href="idle.html">chrome.idle</a>模块则必须指定。</td>
</tr>
<tr>
<td>"management" </td>
<td>如果扩展程序使用
<a href="management.html">chrome.management</a>模块则必须指定。</td>
</tr>
<tr>
<td>"notifications" </td>
<td>允许扩展程序或应用程序使用提出的HTML5
<a href="http://www.chromium.org/developers/design-documents/desktop-notifications/api-specification">通知API</a>
而不需要调用方法请求权限(例如<code>checkPermission()</code>).
。有关更多信息请参见
<a href="notifications.html">桌面通知</a>。</td>
</tr>
<tr>
<td>"privacy" </td>
<td>如果扩展程序使用
<a href="privacy.html">chrome.privacy</a>模块则必须指定。</td>
</tr>
<tr>
<td>"proxy" </td>
<td>如果扩展程序使用
<a href="proxy.html">chrome.proxy</a>模块则必须指定。</td>
</tr>
<tr>
<td>"storage" </td>
<td>如果扩展程序或应用程序使用
<a href="storage.html">chrome.storage</a>模块则必须指定。</td>
</tr>
<tr>
<td>"tabs" </td>
<td>如果扩展程序使用
<a href="tabs.html">chrome.tabs</a>或
<a href="windows.html">chrome.windows</a>模块则必须指定。</td>
</tr>
<tr>
<td>"tts" </td>
<td>如果扩展程序或应用程序使用
<a href="tts.html">chrome.tts</a> 模块则必须指定。 </td>
</tr>
<tr>
<td>"ttsEngine" </td>
<td>如果扩展程序使用
<a href="ttsEngine.html">chrome.ttsEngine</a>模块则必须指定。 </td>
</tr>
<tr>
<td>"unlimitedStorage"</td>
<td>提供无限的存储空间,保存HTML5客户端数据,例如数据库以及本地存储文件。如果没有这一权限,扩展程序的本地存储将限制在5MB以内。
<p class="note">
<b>注意:</b>
该权限仅应用于Web SQL数据库以及应用程序缓存(参见问题
<a href="http://crbug.com/58985">58985</a>)。另外,当前还不能和包含通配符的子域名一起使用,例如
<code>http://*.example.com</code>。
</p>
</td>
<tr>
<tr>
<td>"webNavigation" </td>
<td>如果扩展程序使用
<a href="webNavigation.html">chrome.webNavigation</a>模块则必须指定。</td>
</tr>
<tr>
<td>"webRequest" </td>
<td>如果扩展程序使用
<a href="webRequest.html">chrome.webRequest</a>模块则必须指定。 </td>
</tr>
<tr>
<td>"webRequestBlocking" </td>
<td>如果扩展程序以阻塞方式使用
<a href="webRequest.html">chrome.webRequest</a>模块则必须指定。</td>
</tr>
</tr>
</table>
<h3 id="requirements">requirements</h3>
<p>
应用程序或扩展程序要求的技术。托管站点(例如Chrome网上应用店)可能会使用这一列表建议用户不要安装不能在他们的计算机上工作的应用程序或者扩展程序。目前支持的要求包括"3D"与"plugins"(插件),将来还可能增加其它要求检查。
</p>
<p>
"3D"要求代表GPU硬件加速。
"webgl"要求指的是
<a href="http://www.khronos.org/webgl/">WebGL API</a>。
有关Chrome浏览器对3D图形支持的更多信息,请参见有关
<a href="http://www.google.com/support/chrome/bin/answer.py?answer=1220892">WebGL和3D图形</a>.
的帮助文章。您可以列出您的应用程序要求的3D相关功能,如以下例子所示:
</p>
<pre>
"requirements": {
"3D": {
"features": ["webgl"]
}
}
</pre>
<p>
"plugins"(插件)要求表示应用程序或扩展程序是否需要NPAPI才能运行。默认情况下,当清单文件包含
<a href="http://developer.chrome.com/extensions/npapi.html">"plugins"字段</a>时将启用该要求。对于插件不可用时仍能正常工作的应用程序与扩展程序,您可以将NPAPI设置为false,禁用这一要求。您也可以手工启用该要求,将NPAPI设置为true,如以下例子所示:
</p>
<pre>
"requirements": {
"plugins": {
"npapi": true
}
}
</pre>
<h3 id="version">version</h3>
<p>
一至四个用点(半角英文句号)分开的整数,标识扩展程序的版本。这些整数应该符合这两条规则:范围在0-65535之间(包括0和65535),非零整数不能以0开头。例如99999和032都是无效的。
</p>
<p>
如下是一些有效的版本号的例子:
</p>
<ul>
<li><code>"version": "1"</code> </li>
<li><code>"version": "1.0"</code> </li>
<li><code>"version": "2.10.2"</code> </li>
<li><code>"version": "3.1.2.4567"</code> </li>
</ul>
<p>
自动更新系统比较版本号来确定已安装的某个扩展程序是否需要更新。如果已发布的扩展程序比已安装的扩展程序有更新的版本字符串,该扩展程序将会自动更新。
</p>
<p>
比较将从最左边的整数开始。如果相等,比较右边的整数,以此类推。例如,1.2.0比1.1.9.9999新。
</p>
<p>
省略整数的等于零,例如1.1.9.9999比1.1新。
</p>
<p>
有关更多信息,请参见
<a href="autoupdate.html">自动更新</a>.
</p>
<h3 id="manifest_version">manifest_version</h3>
<p>
指定您的扩展程序包要求的清单文件格式的版本。从Chrome 18开始,开发人员
<em>应该</em>指定<code>2</code>
(不加引号),使用本文档描述的格式:
</p>
<pre>"manifest_version": 2</pre>
<p>
从Chrome 18开始,认为清单文件版本1<em>已弃用</em>,
版本2目前还不是<em>必需的</em>, 但是我们在不远的将来某一时刻,将不再支持使用已弃用清单文件版本的扩展程序包。还没有准备转换至Chrome 18中新的清单文件版本的扩展程序、应用程序以及主题背景既可以明确地指定版本<code>1</code>,也可以完全省略该属性。
</p>
<p>
清单文件格式版本1与版本2之间的改变在 <a href="manifestVersion.html">
<code>manifest_version</code>文档</a>中详细描述。
</p>
<p class="caution">
不建议在Chrome 17或更低版本中设置<code>manifest_version</code> 2 。如果您的扩展程序需要在较旧版本的Chrome浏览器中运行,目前请继续使用版本1,在版本1停止工作前我们将会给出充分的警告。
</p>
<h3 id="web_accessible_resources">web_accessible_resources</h3>
<p>
字符串数组,指定扩展程序包内可以在网页中使用的资源路径(相对于扩展程序包的根目录)。例如,为了在
<code>example.com</code>上建立自定义界面,而插入内容脚本的扩展程序可以将界面需要的所有资源(图片、图标、样式表、脚本等等)加入白名单,如下所示:
</p>
<pre>{
...
"web_accessible_resources": [
"images/my-awesome-image1.png",
"images/my-amazing-icon1.png",
"style/double-rainbow.css",
"script/double-rainbow.js"
],
...
}</pre>
<p>
这些资源将可以通过
<code>chrome-extension://[PACKAGE ID]/[PATH]</code>使用,URL可以通过
<a href="extension.html#method-getURL">
<code>chrome.extension.getURL</code>
</a>方法产生。加入白名单的资源将以合适的
<a href="http://www.w3.org/TR/cors/">CORS</a>头信息提供,所以它们可以通过XHR之类的机制使用。
</p>
<p>
插入的内容脚本本身不需要加入白名单。
</p>
<p>
在清单文件版本2之前,扩展程序内的所有资源都可以从任何网页中访问,这样恶意网站就能收集用户已安装扩展程序的
<a href="http://en.wikipedia.org/wiki/Device_fingerprint">指纹信息</a>或者利用扩展程序中的漏洞(例如
<a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS漏洞</a>)。将资源访问限制为明确需要可以通过网络访问的那些,有助于尽可能减小可用的攻击层面,并保护用户的隐私。
</p>
<h4 id="availability">默认情况</h4>
<p>
使用<a href="#manifest_version"><code>manifest_version</code></a>
2或更高的扩展程序包内的资源<strong>默认情况下被阻止</strong>,必须通过这一属性加入白名单。
</p>
<p>
使用<code>manifest_version</code> 的扩展程序包内的资源默认情况下可用,但是
<em>只要</em>您设置了这一属性,它将以所有加入白名单资源的完整列表来对待,没有列出的资源将被阻止。