11import { BuilderNode, NodeController } from "@kit.ArkUI";
2+ import { pasteboard } from '@kit.BasicServicesKit'
23import { FULL_PERCENT } from "../model/TabStyle";
34import { TermController } from "../model/TermController";
5+ import { util } from "@kit.ArkTS";
46
5- @Builder
6- function buildWebView(item: TermController) {
7- Web({
8- src: $rawfile('term.html'),
9- controller: item.webviewController
10- })
11- .javaScriptProxy({
12- object: item,
13- name: 'native',
14- methodList: ['sendInput', 'resize', 'load'],
15- controller: item.webviewController,
16- asyncMethodList: [],
17- permission: `{
7+ @Component
8+ struct WebView {
9+ @Require item: TermController
10+
11+ @Builder
12+ contextMenu(webController: WebviewController) {
13+ Flex({
14+ direction: FlexDirection.Column
15+ }) {
16+ MenuItem({ content: '复制' })
17+ .width('100%')
18+ .onClick(async () => {
19+ const selection = await webController.runJavaScript('exports.copy()')
20+ if (selection !== '""') {
21+ let text: string = JSON.parse(selection);
22+ const board = pasteboard.getSystemPasteboard()
23+ const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text)
24+ board.setData(pasteData)
25+ }
26+ })
27+ MenuItem() {
28+ PasteButton({ buttonType: ButtonType.ROUNDED_RECTANGLE })
29+ .onClick(async (event: ClickEvent, result: PasteButtonOnClickResult) => {
30+ if (PasteButtonOnClickResult.SUCCESS === result) {
31+ let board = pasteboard.getSystemPasteboard();
32+ const data = await board.getData()
33+ const text = data.getPrimaryText()
34+ const array = util.TextEncoder.create().encodeInto(text)
35+ const base64 = new util.Base64Helper().encodeToStringSync(array)
36+ webController.runJavaScript(`exports.paste(atob('${base64}'))`)
37+ }
38+ })
39+ .width('100%')
40+ .align(Alignment.Start)
41+ .backgroundColor('#292e2b')
42+ }
43+ }
44+ .width('160vp')
45+ }
46+
47+ build() {
48+ Web({
49+ src: $rawfile('term.html'),
50+ controller: this.item.webviewController
51+ })
52+ .javaScriptProxy({
53+ object: this.item,
54+ name: 'native',
55+ methodList: ['sendInput', 'resize', 'load'],
56+ controller: this.item.webviewController,
57+ asyncMethodList: [],
58+ permission: `{
1859 "javascriptProxyPermission": {
1960 "urlPermissionList": [
2061 {
@@ -26,9 +67,16 @@ function buildWebView(item: TermController) {
2667 ]
2768 }
2869 }`
29- })
30- .backgroundColor('#000')
31- .height(FULL_PERCENT)
70+ })
71+ .backgroundColor('#000')
72+ .height(FULL_PERCENT)
73+ .bindContextMenu(this.contextMenu(this.item.webviewController), ResponseType.RightClick)
74+ }
75+ }
76+
77+ @Builder
78+ function buildWebView(item: TermController) {
79+ WebView({ item: item })
3280}
3381
3482export class TermWebView extends NodeController {
0 commit comments