1(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{309:function(n,s,a){"use strict";a.r(s),a.d(s,"readingTime",function(){return o}),a.d(s,"default",function(){return u}),a.d(s,"tableOfContents",function(){return i}),a.d(s,"frontMatter",function(){return r});var t=a(36),p=(a(0),a(35)),e=a(228),o={text:"2 min read",minutes:1.53,time:91800,words:306},c={},l="wrapper";function u(n){var s=n.components,a=Object(t.a)(n,["components"]);return Object(p.mdx)(l,Object.assign({},c,a,{components:s,mdxType:"MDXLayout"}),Object(p.mdx)("h2",{id:"\u4f60\u53ef\u4ee5\u4ece\u672c\u6587\u4e86\u89e3\u5230"},"\u4f60\u53ef\u4ee5\u4ece\u672c\u6587\u4e86\u89e3\u5230"),Object(p.mdx)("h3",{id:"icopy-\u80cc\u666f"},"iCopy \u80cc\u666f"),Object(p.mdx)("p",null,Object(p.mdx)("a",Object.assign({parentName:"p"},{href:"https://greasyfork.org/zh-CN/scripts/411953-icopy5"}),"iCopy"),"\u662f\u4e00\u4e2a\u7528\u4e8e Chrome \u6d4f\u89c8\u5668\u7684 js \u63d2\u4ef6\uff0c\u4e3b\u8981\u7528\u4e8e\u5e2e\u52a9\u5f00\u53d1\u8005\u5728\u67d0\u4e9b CASE \u7f51\u7ad9\u4e2d\u65b9\u4fbf\u7684\u590d\u5236\u548c\u683c\u5f0f\u5316 git commit msg\u3002"),Object(p.mdx)("p",null,"\u539f\u5148\u7684 CASE \u590d\u5236\u5de5\u4f5c\u6d41\u7a0b\u5982\u4e0b"),Object(p.mdx)(e.Mermaid,{chart:"graph TD;\n CASE\u7f51\u7ad9--\u590d\u5236API--\x3e\u526a\u8d34\u677f;",mdxType:"Mermaid"}),Object(p.mdx)("p",null,"\u7136\u9e45\uff0c\u7531\u4e8e CASE \u7f51\u7ad9\u590d\u5236\u7684\u683c\u5f0f\u4e0d\u7b26\u5408 git \u7684\u8981\u6c42\uff0c\u6bd4\u5982\u6211\u4eec\u9075\u5faa angular \u7684\u89c4\u8303\uff0c\u90a3\u5c31\u9700\u8981\u6539\u8fd9\u4e2a msg\uff0c\u8fd9\u65f6\u5019 iCopy \u5c31\u4e0a\u573a\u4e86\u3002"),Object(p.mdx)("p",null,"\u7528\u4e86 iCopy \u7684\u5de5\u4f5c\u6d41\u7a0b"),Object(p.mdx)(e.Mermaid,{chart:"graph TD;\n CASE\u7f51\u7ad9--\u62e6\u622a\u590d\u5236API\u8c03\u7528\u5e76\u4fee\u6539\u5185\u5bb9--\x3e\u526a\u8d34\u677f;",mdxType:"Mermaid"}),Object(p.mdx)("p",null,"\u8bf4\u767d\u4e86\u5c31\u662f\u505a\u526a\u8d34\u677f\u7684\u62e6\u622a\u3002"),Object(p.mdx)("p",null,"CASE \u7f51\u7ad9\u5c06\u5185\u5bb9\u590d\u5236\u5230\u526a\u8d34\u677f\uff0c\u5e38\u7528\u7684\u4e00\u822c\u6709\u4e24\u79cd\u65b9\u6cd5\u3002"),Object(p.mdx)("p",null,"1\u3001",Object(p.mdx)("a",Object.assign({parentName:"p"},{href:"https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand"}),"execCommand")," \u65e7\u7684\uff0cMDN \u4e0d\u63a8\u8350\u4f7f\u7528"),Object(p.mdx)("p",null,"2\u3001",Object(p.mdx)("a",Object.assign({parentName:"p"},{href:"https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API"}),"Clipboard API")," \u65b0\u7248\u672c CASE \u7f51\u7ad9\u8c03\u7528"),Object(p.mdx)("h3",{id:"execcommand-vs-clipboard-api"},"execCommand vs clipboard API"),Object(p.mdx)("p",null,"\u6240\u4ee5\u53ef\u4ee5\u63a8\u6d4b\u56e0\u4e3a execCommand \u63a5\u53e3\u4e0d\u63a8\u8350\u4f7f\u7528\u4e86\uff0c\u6240\u4ee5 CASE \u7f51\u7ad9\u6539\u9020\u6210\u4e86\u7528 Clipboard API\u3002"),Object(p.mdx)("p",null,"\u90a3 clipboard API \u6709\u4ec0\u4e48\u597d\u5904\u5462\uff1f"),Object(p.mdx)("p",null,"\u76f4\u89c2\u7684\u53ef\u4ee5\u611f\u53d7\u4e00\u4e0b\u4e24\u6bb5\u4ee3\u7801"),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'<span class="token comment">// execCommand</span>\n<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token keyword">function</span> <span class="token function">copyToCb</span><span class="token punctuation">(</span><span class="token parameter">text</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">const</span> input <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">\'textarea\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n input<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">
1\'readonly\'</span><span class="token punctuation">,</span> <span class="token string">\'readonly\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n input<span class="token punctuation">.</span>value <span class="token operator">=</span> text<span class="token punctuation">;</span>\n document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>input<span class="token punctuation">)</span><span class="token punctuation">;</span>\n input<span class="token punctuation">.</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n input<span class="token punctuation">.</span><span class="token function">setSelectionRange</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">9999</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n document<span class="token punctuation">.</span><span class="token function">execCommand</span><span class="token punctuation">(</span><span class="token string">\'copy\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">removeChild</span><span class="token punctuation">(</span>input<span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token keyword">return</span> Promise<span class="token punctuation">.</span><span class="token function">resolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n'}}))),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'<span class="token comment">// clipboard API</span>\n<span class="token keyword">var</span> promise <span class="token operator">=</span> navigator<span class="token punctuation">.</span>clipboard<span class="token punctuation">.</span><span class="token function">writeText</span><span class="token punctuation">(</span>newClipText<span class="token punctuation">)</span><span class="token punctuation">;</span>\n'}}))),Object(p.mdx)("p",null,"\u4ee3\u7801\u91cf\u51fa\u73b0\u4e86\u8089\u773c\u53ef\u89c1\u7684\u4e0b\u964d\u3002"),Object(p.mdx)("p",null,"\u6b64\u5916\uff0cclipboard\u8fd4\u56de\u7684\u662fpromise\uff0c\u89e3\u9501\u4e86\u66f4\u73b0\u4ee3\u7684\u8c03\u7528\u65b9\u5f0f\u3002"),Object(p.mdx)("h4",{id:"\u62e6\u622a-execcommand-\u7684\u59ff\u52bf"},"\u62e6\u622a execCommand \u7684\u59ff\u52bf"),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'<span class="token keyword">const</span> _execCommand <span class="token operator">=</span> document<span class="token punctuation">.</span>execCommand<span class="token punctuation">;</span> <span class="token comment">// \u539f\u65b9\u6cd5</span>\n\n<span class="token comment">// \u52ab\u6301</span>\ndocument<span class="token punctuation">.</span><span class="token function-variable function">execCommand</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">evtName</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">if</span> <span class="token punctuation">(</span>evtName <span class="token operator">===</span> <span class="token string">\'copy\'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">\'enter exec\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
1\n <span class="token comment">// \u7531\u4e8e\u524d\u8005\u4f7f\u7528\u5fc5\u987b\u8981selection\u7136\u540eexec copy</span>\n <span class="token comment">// \u83b7\u53d6\u9009\u4e2d\u90e8\u5206</span>\n <span class="token keyword">const</span> text <span class="token operator">=</span> window<span class="token punctuation">.</span><span class="token function">getSelection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token function">main</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// \u683c\u5f0f\u5316text\u5e76\u6700\u7ec8\u8c03\u7528\u4e86copyText</span>\n <span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n\n<span class="token keyword">const</span> <span class="token function-variable function">copyText</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">text</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>\n <span class="token keyword">const</span> el <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">\'textarea\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n el<span class="token punctuation">.</span>value <span class="token operator">=</span> text<span class="token punctuation">;</span>\n document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>el<span class="token punctuation">)</span><span class="token punctuation">;</span>\n el<span class="token punctuation">.</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token function">_execCommand</span><span class="token punctuation">(</span><span class="token string">\'copy\'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// \u8c03\u7528\u539f\u65b9\u6cd5</span>\n document<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">removeChild</span><span class="token punctuation">(</span>el<span class="token punctuation">)</span><span class="token punctuation">;</span>\n console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">\'copied:\'</span><span class="token punctuation">,</span> text<span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n'}}))),Object(p.mdx)("p",null,"execCommand \u6bd4\u8f83\u6e05\u6670\u5c31\u4e0d\u89e3\u91ca\u4e86\u3002"),Object(p.mdx)("h4",{id:"\u62e6\u622a-clipboard-api-\u7684\u59ff\u52bf"},"\u62e6\u622a clipboard API \u7684\u59ff\u52bf"),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'<span class="token keyword">const</span> _writeText <span class="token operator">=</span> navigator<span class="token punctuation">.</span>clipboard<span class="token punctuation">.</span>writeText<span class="token punctuation">;</span> <span class="token comment">// save for later use</span>\n\n<span class="token keyword">const</span> <span class="token function-variable function">copyText</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">text</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>\n <span class="token comment">// this\u5f97\u6307\u5411navigator.clipboard\u5b9e\u4f8b</span>\n <span class="token function">_writeText</span><span class="token punctuation">.</span><span class="token function">call</span><span class="token punctuation">(</span>navigator<span class="token punctuation">.</span>clipboard<span class="token punctuation">,</span>
1 text<span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n'}}))),Object(p.mdx)("p",null,"writeText \u52ab\u6301\u8fd9\u91cc\u6709\u4e00\u4e2a\u5751\uff0c\u5c31\u5728\u4e8e\u5982\u679c\u76f4\u63a5\u4f7f\u7528\uff0c\u4f1a\u62a5\u9519\uff0c\u5927\u81f4\u5185\u5bb9\u662ftypeError\u627e\u4e0d\u5230Clipboard.navigator.clipboard.writeText\u7684\u8fd9\u4e2a\u65b9\u6cd5"),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'<span class="token function">_writeText</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span>\n'}}))),Object(p.mdx)("p",null,"\u8fd9\u6bd4\u8f83\u8ba9\u4eba\u8d39\u89e3\uff0c\u4e3a\u4ec0\u4e48\u4f1a\u662fClipboard\u7684\u7684writeText\u65b9\u6cd5\u5462\uff1f\u4e3a\u4ec0\u4e48\u662ftypeError\u5462\uff1f"),Object(p.mdx)("p",null,"\u8fd9\u5c31\u4e0d\u5f97\u4e0d\u7814\u7a76\u4e00\u4e0b\u8fd9\u4e2a\u65b9\u6cd5\u7a76\u7adf\u5728\u505a\u4ec0\u4e48\u3002"),Object(p.mdx)("p",null,"\u9996\u5148\u6253\u5f00",Object(p.mdx)("a",Object.assign({parentName:"p"},{href:"https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/clipboard/clipboard.cc;l=53?q=CreateForWriteText&ss=chromium%2Fchromium%2Fsrc"}),"Chromium\u7684clipboard\u90e8\u5206\u6e90\u7801")),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-cpp","data-language":"cpp","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'ScriptPromise <span class="token class-name">Clipboard</span><span class="token double-colon punctuation">::</span><span class="token function">writeText</span><span class="token punctuation">(</span>ScriptState<span class="token operator">*</span> script_state<span class="token punctuation">,</span>\n <span class="token keyword">const</span> String<span class="token operator">&</span> data<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">return</span> <span class="token class-name">ClipboardPromise</span><span class="token double-colon punctuation">::</span><span class="token function">CreateForWriteText</span><span class="token punctuation">(</span><span class="token function">GetExecutionContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>\n script_state<span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n\n<span class="token comment">// static</span>\nScriptPromise <span class="token class-name">ClipboardPromise</span><span class="token double-colon punctuation">::</span><span class="token function">CreateForWriteText</span><span class="token punctuation">(</span>ExecutionContext<span class="token operator">*</span> context<span class="token punctuation">,</span>\n ScriptState<span class="token operator">*</span> script_state<span class="token punctuation">,</span>\n <span class="token keyword">const</span> String<span class="token operator">&</span> data<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>script_state<span class="token operator">-></span><span class="token function">ContextIsValid</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>\n <span class="token keyword">return</span> <span class="token function">ScriptPromise</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n ClipboardPromise<span class="token operator">*</span> clipboard_promise <span class="token operator">=</span>
1\n <span class="token generic-function"><span class="token function">MakeGarbageCollected</span><span class="token generic class-name"><span class="token operator"><</span>ClipboardPromise<span class="token operator">></span></span></span><span class="token punctuation">(</span>context<span class="token punctuation">,</span> script_state<span class="token punctuation">)</span><span class="token punctuation">;</span>\n clipboard_promise<span class="token operator">-></span><span class="token function">GetTaskRunner</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">PostTask</span><span class="token punctuation">(</span>\n FROM_HERE<span class="token punctuation">,</span> <span class="token class-name">WTF</span><span class="token double-colon punctuation">::</span><span class="token function">Bind</span><span class="token punctuation">(</span><span class="token operator">&</span>ClipboardPromise<span class="token double-colon punctuation">::</span>HandleWriteText<span class="token punctuation">,</span>\n <span class="token function">WrapPersistent</span><span class="token punctuation">(</span>clipboard_promise<span class="token punctuation">)</span><span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token keyword">return</span> clipboard_promise<span class="token operator">-></span>script_promise_resolver_<span class="token operator">-></span><span class="token function">Promise</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n\n<span class="token keyword">void</span> <span class="token class-name">ClipboardPromise</span><span class="token double-colon punctuation">::</span><span class="token function">HandleWriteTextWithPermission</span><span class="token punctuation">(</span>PermissionStatus status<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token function">DCHECK_CALLED_ON_VALID_SEQUENCE</span><span class="token punctuation">(</span>sequence_checker_<span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">GetExecutionContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>\n <span class="token keyword">return</span><span class="token punctuation">;</span>\n <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">!=</span> PermissionStatus<span class="token double-colon punctuation">::</span>GRANTED<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n script_promise_resolver_<span class="token operator">-></span><span class="token function">Reject</span><span class="token punctuation">(</span><span class="token generic-function"><span class="token function">MakeGarbageCollected</span><span class="token generic class-name"><span class="token operator"><</span>DOMException<span class="token operator">></span></span></span><span class="token punctuation">(</span>\n DOMExceptionCode<span class="token double-colon punctuation">::</span>kNotAllowedError<span class="token punctuation">,</span> <span class="token string">"Write permission denied."</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token keyword">return</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n<span class="highlighted-line"> SystemClipboard<span class="token operator">*</span> system_clipboard <span class="token operator">=</span> <span class="token function">GetLocalFrame</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">GetSystemClipboard</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> system_clipboard<span class="token operator">-></span><span class="token function">WritePlainText</span><span class="token punctuation">(</span>plain_text_<span class="token punctuation">)</span><span class="token punctuation">;</span>\n system_clipboard<span class="token operator">-></span><span class="token function">CommitWrite</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n script_promise_resolver_<span class="token operator">-></span><span class="token function">Resolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n'}}))),Object(p.mdx)("p",null,"\u7a0d\u5fae\u68b3\u7406\u4e86\u4e00\u4e0b\u8c03\u7528\u5173\u7cfb"),Object(p.mdx)(e.Mermaid,{chart:"graph TD;\n\n ClipboardPromise::CreateForWriteText--\x3e ClipboardPromise::HandleWriteText--\x3e ClipboardPromise::HandleWriteTextWithPermission--\x3eGetSystemClipboard--\x3e WritePlainText_plain_text--\x3e\n system_clipboard_CommitWrite--\x3e\n script_promise_resolver_Resolve",mdxType:"Mermaid"}),Object(p.mdx)("p",null,"\u6d41\u7a0b\u6bd4\u8f83\u6e05\u6670\uff0c\u6211\u4eec\u91cd\u70b9\u5173\u6ce8\u8fd9\u4e2aGetLocalFrame()\u65b9\u6cd5\u3002\u56e0\u4e3a\u95ee\u9898\u5c31\u51fa\u5728",Object(p.mdx)("a",Object.assign({parentName:"p"},{href:"https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/local_frame.cc;l=2628"}),"\u8fd9\u4e2a\u6587\u4ef6")),Object(p.mdx)("p",null,"\u8fd9\u91cc\u53d1\u751f\u4e86\u4e00\u4e2a\u5f3a\u8f6c\uff0c\u5c06this\u8f6c\u6210\u4e86",Object(p.mdx)("inlineCode",{parentName:"p"},"system_clipboard_"),"\uff0c\u6240\u4ee5\u9519\u8bef\u63d0\u793a\u663e\u793a\u7684\u662ftypeError\uff08cpp\u7684\u90e8\u5206\u51fa\u9519\u4e86\uff09\u3002\u800c\u4e0d\u662fjs\u7684\u9519\u8bef\uff08js\u6839\u672c\u6ca1\u6709type\u8fd9\u4e2a\u8bcd\u6c47\uff09\u3002"),Object(p.mdx)("p",null,"\u770b\u4e86\u8fd9\u4e2a\u4ee3\u7801\u4e4b\u540e\uff0c\u6211\u5f88\u6e05\u695a\uff0c\u53ea\u8981\u5728\u8c03\u7528\u7684\u65f6\u5019\u786e\u4fddthis\u662f\u6b63\u786e\u7684clipboard\u7684\u5b9e\u4f8b\u5c31\u884c\u4e86\u3002"),Object(p.mdx)("p",null,"\u90a3\u4e48\u8c01\u624d\u662fclipboard\u7684\u5b9e\u4f8b\u5462\uff1f\u7b54\u6848\u662f",Object(p.mdx)("inlineCode",{parentName:"p"},"navigator.clipboard"),"\u3002"),Object(p.mdx)("p",null,"\u9898\u5916\u8bdd\uff1a\u6d4f\u89c8\u5668\u5168\u5c40\u5bf9\u8c61\u91cc\u9762\u6709\u4e00\u4e2aClipboard\uff0c\u4ed6\u662f\u8fd9\u4e2a\u5b9e\u4f8b\u7684\u6784\u9020\u51fd\u6570\uff0chost\u5728\u9
1002\u5f53\u7684\u65f6\u5019\u4f1a\u521b\u5efa\u5b83\u7684\u5b9e\u4f8b\uff08lazy\uff09"),Object(p.mdx)("p",null,"\u6b64\u5916\uff0c\u6709\u540c\u5b66\u5c31\u4f1a\u95ee\u4e86\uff0c\u90a3\u4e48\u4e3a\u4ec0\u4e48",Object(p.mdx)("inlineCode",{parentName:"p"},"execCommand"),"\u4e0d\u62a5\u9519\u5462\uff1f\n\u4e3b\u8981\u662f\u9ed8\u8ba4\u7684this\u6307\u5411\u4e86window\uff0c\u800cexecCommand\u5185\u90e8"),Object(p.mdx)("pre",null,Object(p.mdx)("code",Object.assign({parentName:"pre"},{className:"language-jsx","data-language":"jsx","data-highlighted-line-numbers":"",dangerouslySetInnerHTML:{__html:'contentWindow<span class="token punctuation">.</span>document<span class="token punctuation">.</span>execCommand\n'}}))),Object(p.mdx)("h3",{id:"gist-\u7684\u5b9e\u7528\u5c0f\u6280\u5de7"},"gist \u7684\u5b9e\u7528\u5c0f\u6280\u5de7"),Object(p.mdx)("p",null,"\u6211\u4eec\u7684\u811a\u672c\u7528git\u7684gist\u53d1\u5e03\u548c\u7ba1\u7406\uff0c\u90a3\u4e48\u83b7\u53d6\u4e00\u4e2a\u56fa\u5b9a\u7684raw\u6587\u4ef6url\u5462\u3002"),Object(p.mdx)("p",null,"\u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u8fd9\u4e2a\u5730\u5740\u8bbf\u95ee\u54c8\u3002\n",Object(p.mdx)("inlineCode",{parentName:"p"},"https://gist.githubusercontent.com/[username]/[gist_id]/raw/[filename]")))}u.isMDXComponent=!0;var i=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];return[{id:"\u4f60\u53ef\u4ee5\u4ece\u672c\u6587\u4e86\u89e3\u5230",level:2,title:"\u4f60\u53ef\u4ee5\u4ece\u672c\u6587\u4e86\u89e3\u5230",children:[{id:"icopy-\u80cc\u666f",level:3,title:"iCopy \u80cc\u666f",children:[]},{id:"execcommand-vs-clipboard-api",level:3,title:"execCommand vs clipboard API",children:[]},{id:"gist-\u7684\u5b9e\u7528\u5c0f\u6280\u5de7",level:3,title:"gist \u7684\u5b9e\u7528\u5c0f\u6280\u5de7",children:[]}]}]},r={}}}]); 2//# sourceMappingURL=145.2843aebf.chunk.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.