Hi @Craig Mitchell,
You were right about script,
The above script posted by me seems to have issues, below is the working
script, I am not getting any compiler errors but neither getting any string
as return value.
I am testing things using below code,

readTextButton.addClickHandler(new ClickHandler(){
public void onClick(ClickEvent event){
//Goal is to receive copied value on readText() function call.
String str =readText(null)// *1. What should I pass as argument over here-I
know null argument is not correct, My apologies as I am not well versed
with async         //callbacks*
}
});

public static native String readText(Loaded<String> clipboardText)/*-{
try{
if($wnd.navigator.clipboard){
       var promise=$wnd.navigator.clipboard.readText();
        var resolve= function(text){
        console.log(txt);  *//2.Here I can see copied text in console*
       [email protected]::data(*)(text);
};
 var reject=function(reason){
  console.log('$wnd.navigator.clipboard.readText failed: + reason');
*//3.Getting
cannot read properties of null*
};
promise["catch"](reject);
promise.then(resolve,reject)["catch"](reject);

}

}
catch(e){}
}-*/;




On Fri, Dec 30, 2022 at 10:53 AM Craig Mitchell <[email protected]>
wrote:

> As it's doing it asynchronously, you'll need to add a callback to return
> the string.
>
> Something like this:
>
> ---
>
> package mypackage;
>
> public interface Loaded<T> {
>     public void data(T data);
> }
>
> ---
>
> public static native String readText(Loaded<String> clipboardText) /*-{
>     try {
>         var promise = $wnd.navigator.clipboard.readText();
>         var resolve = function(text) {
>         console.log(text);// I can print text here but not able to return
> it as String
>         [email protected]::data(*)(text);
>     }
>     catch (e){
>       //futher code goes here
>     }
> }-*/;
>
> ---
>
> Note:  I'm just copying your JavaScript, it doesn't look correct to me, I
> think you also need:
>
> promise.then(resolve);
> or something like that.
>
> On Friday, 30 December 2022 at 2:30:14 pm UTC+11 [email protected]
> wrote:
>
>> Yes, it's working but not working with GWT, I think the async function
>> and await keyword is not supported with GWT, was getting a compiler error,
>> I tried below code which worked, but not able to return as String, can
>> print the copied text with console.log(text). As of now I didn't get any
>> solution, I tried to search on the internet but had no luck.
>>
>>
>> is there any library or anything to be included/imported to get async/await 
>> support with GWT?
>>
>> public static native String readText()/*-{
>>    try
>>      {
>>       var promise = $wnd.navigator.clipboard.readText();
>>       var resolve = function(text){
>>       console.log(text);// I can print text here but not able to return it 
>> as String
>>       }
>>       catch (e){
>>       //futher code goes here
>>       }
>>      }-*/;
>>
>>
>> On Fri, Dec 30, 2022 at 8:04 AM Craig Mitchell <[email protected]>
>> wrote:
>>
>>> Apologies.  That stackoverflow example gets blocked due to cross origin.
>>>
>>> Just ran a simple test:
>>>
>>> <html>
>>> <script>
>>> async function readClipboard () {
>>>   if (!navigator.clipboard) {
>>>     // Clipboard API not available
>>>     return
>>>   }
>>>   try {
>>>     const text = await navigator.clipboard.readText();
>>>     document.querySelector('.clipboard-content').innerText = text;
>>>   } catch (err) {
>>>     console.error('Failed to copy!', err)
>>>   }
>>> }
>>>
>>> function updateClipboard() {
>>>   // Here You Can Debug without DomException
>>>   debugger
>>>   const clipboard =
>>> document.querySelector('.clipboard-content').innerText;
>>>   document.querySelector('.clipboard-content').innerText = 'Updated => '
>>> + clipboard;
>>> }
>>> </script>
>>>
>>> <body>
>>> <button onclick="readClipboard()">Paste</button>
>>> <p class="clipboard-content"></p>
>>> <button onclick="updateClipboard()">Edit</button>
>>> </body>
>>> </html>
>>>
>>> and it worked fine (browser popped up a message asking for permission).
>>>
>>> On Thursday, 29 December 2022 at 5:02:34 pm UTC+11 Craig Mitchell wrote:
>>>
>>>> Browsers now need you to get your users to grant permissions in their
>>>> browsers for this to work.  See "Permissions API" here:
>>>> https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText#security
>>>>
>>>>
>>>> An example:  https://stackoverflow.com/a/59954231/418057  When I run
>>>> the code snippet, and press "paste", it give "NotAllowedError".
>>>>
>>>> On Monday, 26 December 2022 at 5:02:32 pm UTC+11 [email protected]
>>>> wrote:
>>>>
>>>>> Hi Experts,
>>>>> I am newbie with javascript and GWT, I want my function to return
>>>>> clipboard data,for further use in application upon click of(tool button).
>>>>> Is there any way to get the text read from clipboard, I am looking
>>>>> something similar @Jim Douglas mentioned, with
>>>>> $wnd.navigator.clipboard.readText() is working but I need the "pasted" 
>>>>> text
>>>>> to be returned to my native method call
>>>>>
>>>>> public static native String readText(){
>>>>> try{
>>>>>    if($wnd.navigator.clipboard){
>>>>>       var promise= $wnd.navigator.clipboard.readText();
>>>>>       var resolve =function(text){
>>>>>       console.log(text);   // i want this text which i can see on
>>>>> console(string)  to be returned , Is it possible and how to achieve it any
>>>>> hack to ge
>>>>>     }
>>>>>   }
>>>>> }
>>>>> }
>>>>>
>>>>> Please help, as i got stuck at this point for a while. Thanks.
>>>>> On Wednesday, 16 October 2019 at 19:53:27 UTC+5:30 Jim Douglas wrote:
>>>>>
>>>>>> Oh wow, I completely missed that. Of course *navigator* is really
>>>>>> *window.navigator*. JavaScript sample code almost always references
>>>>>> *navigator*, not *window.navigator*, and I rarely think of that
>>>>>> detail. Even after staring at that code for hours looking for something I
>>>>>> might have missed, that never occurred to me. Thanks, Thomas; that's
>>>>>> exactly what I was missing. With that simple change, this now works.
>>>>>>
>>>>>>
>>>>>> On Wednesday, October 16, 2019 at 5:44:05 AM UTC-7, Thomas Broyer
>>>>>> wrote:
>>>>>>>
>>>>>>> Have you tried with $wnd.navigator.clipboard?
>>>>>>>
>>>>>>> On Tuesday, October 15, 2019 at 10:40:04 PM UTC+2, Jim Douglas wrote:
>>>>>>>>
>>>>>>>> Ok, there are a few moving parts to this. Keeping it as short as
>>>>>>>> possible, this is the new Clipboard API:
>>>>>>>>
>>>>>>>> https://developer.mozilla.org/en-US/docs/Web/API/Clipboard
>>>>>>>>
>>>>>>>> Support is extremely limited at the moment, but for now I'd be
>>>>>>>> happy to get something working in Chrome:
>>>>>>>>
>>>>>>>> https://caniuse.com/#feat=mdn-api_clipboard
>>>>>>>>
>>>>>>>> Here's Google's live sample page:
>>>>>>>>
>>>>>>>> https://googlechrome.github.io/samples/async-clipboard/index.html
>>>>>>>>
>>>>>>>> For obvious reasons, there's a lot of paranoid security around
>>>>>>>> JavaScript access to the clipboard. This is the specific detail I'm 
>>>>>>>> running
>>>>>>>> into:
>>>>>>>>
>>>>>>>>
>>>>>>>> https://stackoverflow.com/questions/56306153/domexception-on-calling-navigator-clipboard-readtext
>>>>>>>>
>>>>>>>> These APIs throw a security exception if document.hasFocus() is
>>>>>>>> false. And I'm not seeing any way to honour that rule in a GWT app. In 
>>>>>>>> my
>>>>>>>> production app, and in a tiny standalone GWT app I just generated for
>>>>>>>> testing purposes, document.hasFocus() is always false ($doc.hasFocus() 
>>>>>>>> is
>>>>>>>> true).
>>>>>>>>
>>>>>>>> For testing purposes, I generated the GWT StockWatcher demo app:
>>>>>>>>
>>>>>>>> http://www.gwtproject.org/doc/latest/tutorial/create.html
>>>>>>>>
>>>>>>>> Then I added some UI hooks for clipboard testing elements in
>>>>>>>> StockWatcher.html:
>>>>>>>>
>>>>>>>>     <h1>Web Application Starter Project</h1>
>>>>>>>>
>>>>>>>>
>>>>>>>>     <table align=*"center"*>
>>>>>>>>
>>>>>>>>       <tr>
>>>>>>>>
>>>>>>>>         <td colspan=*"2"* style="font-weight:*bold*;">Please enter
>>>>>>>> your name:</td>
>>>>>>>>
>>>>>>>>       </tr>
>>>>>>>>
>>>>>>>>       <tr>
>>>>>>>>
>>>>>>>>         <td id=*"nameFieldContainer"*></td>
>>>>>>>>
>>>>>>>>         <td id=*"sendButtonContainer"*></td>
>>>>>>>>
>>>>>>>>       </tr>
>>>>>>>>
>>>>>>>>       <tr>
>>>>>>>>
>>>>>>>>         <td colspan=*"2"* style="color:*red*;" id=
>>>>>>>> *"errorLabelContainer"*></td>
>>>>>>>>
>>>>>>>>       </tr>
>>>>>>>>
>>>>>>>>       <tr>
>>>>>>>>
>>>>>>>>         <td id=*"readTextField"*></td>
>>>>>>>>
>>>>>>>>         <td id=*"readTextButton"*></td>
>>>>>>>>
>>>>>>>>       </tr>
>>>>>>>>
>>>>>>>>       <tr>
>>>>>>>>
>>>>>>>>         <td id=*"writeTextField"*></td>
>>>>>>>>
>>>>>>>>         <td id=*"writeTextButton"*></td>
>>>>>>>>
>>>>>>>>       </tr>
>>>>>>>>
>>>>>>>>     </table>
>>>>>>>>
>>>>>>>> And minimal testing UI in StockWatcher.java onModuleLoad:
>>>>>>>>
>>>>>>>>         TextBox readText = *new* TextBox();
>>>>>>>>
>>>>>>>>         readText.setText("readText");
>>>>>>>>
>>>>>>>>         Button readTextButton = *new* Button("readText");
>>>>>>>>
>>>>>>>>
>>>>>>>>         TextBox writeText = *new* TextBox();
>>>>>>>>
>>>>>>>>         writeText.setText("writeText");
>>>>>>>>
>>>>>>>>         Button writeTextButton = *new* Button("writeText");
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>         RootPanel.*get*("readTextField").add(readText);
>>>>>>>>
>>>>>>>>         RootPanel.*get*("readTextButton").add(readTextButton);
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>         RootPanel.*get*("writeTextField").add(writeText);
>>>>>>>>
>>>>>>>>         RootPanel.*get*("writeTextButton").add(writeTextButton);
>>>>>>>>
>>>>>>>>         readTextButton.addClickHandler(*new* ClickHandler()
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             *public* *void* onClick(ClickEvent event)
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 readText();
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>         });
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>         writeTextButton.addClickHandler(*new* ClickHandler()
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             *public* *void* onClick(ClickEvent event)
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 writeText(writeText.getText());
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>         });
>>>>>>>>
>>>>>>>> And corresponding JSNI functions to attempt to invoke the Clipboard
>>>>>>>> API:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>     *public* *native* *void* readText()
>>>>>>>>
>>>>>>>>     /*-{
>>>>>>>>
>>>>>>>>         try
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             if (navigator.clipboard)
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 console.log('navigator.clipboard.readText()');
>>>>>>>>
>>>>>>>>                 console.log('document.hasFocus()='
>>>>>>>> +document.hasFocus());
>>>>>>>>
>>>>>>>>                 console.log('$doc.hasFocus()='+$doc.hasFocus());
>>>>>>>>
>>>>>>>>                 var promise = navigator.clipboard.readText();
>>>>>>>>
>>>>>>>>                 var resolve = function(text) {
>>>>>>>>
>>>>>>>>                     console.log(text);
>>>>>>>>
>>>>>>>>                 };
>>>>>>>>
>>>>>>>>                 var reject = function(reason) {
>>>>>>>>
>>>>>>>>                     console.log('navigator.clipboard.readText
>>>>>>>> failed: '+reason);
>>>>>>>>
>>>>>>>>                 };
>>>>>>>>
>>>>>>>>                 promise["catch"](reject);
>>>>>>>>
>>>>>>>>                 promise.then(resolve,reject)["catch"](reject);
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>             else
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 console.log('This browser does not support
>>>>>>>> navigator.clipboard.');
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>         }
>>>>>>>>
>>>>>>>>         catch (e)
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             console.error(e,e.stack);
>>>>>>>>
>>>>>>>>         }
>>>>>>>>
>>>>>>>>     }-*/;
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>     *public* *native* *void* writeText(String p_text)
>>>>>>>>
>>>>>>>>     /*-{
>>>>>>>>
>>>>>>>>         try
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             var _this = this;
>>>>>>>>
>>>>>>>>             if (navigator.clipboard)
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 console.log('navigator.clipboard.writeText()');
>>>>>>>>
>>>>>>>>                 console.log('document.hasFocus()='
>>>>>>>> +document.hasFocus());
>>>>>>>>
>>>>>>>>                 console.log('$doc.hasFocus()='+$doc.hasFocus());
>>>>>>>>
>>>>>>>>                 var promise =
>>>>>>>> navigator.clipboard.writeText(p_text);
>>>>>>>>
>>>>>>>>                 var resolve = function(text) {
>>>>>>>>
>>>>>>>>                     console.log('navigator.clipboard.writeText '
>>>>>>>> +text);
>>>>>>>>
>>>>>>>>                 };
>>>>>>>>
>>>>>>>>                 var reject = function(reason) {
>>>>>>>>
>>>>>>>>                     console.log('navigator.clipboard.writeText
>>>>>>>> failed: '+reason);
>>>>>>>>
>>>>>>>>                 };
>>>>>>>>
>>>>>>>>                 promise["catch"](reject);
>>>>>>>>
>>>>>>>>                 promise.then(resolve,reject)["catch"](reject);
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>             else
>>>>>>>>
>>>>>>>>             {
>>>>>>>>
>>>>>>>>                 console.log('This browser does not support
>>>>>>>> navigator.clipboard.');
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>>         }
>>>>>>>>
>>>>>>>>         catch (e)
>>>>>>>>
>>>>>>>>         {
>>>>>>>>
>>>>>>>>             console.error(e,e.stack);
>>>>>>>>
>>>>>>>>         }
>>>>>>>>
>>>>>>>>     }-*/;
>>>>>>>>
>>>>>>>> And I'm stuck on the same security error noted in that
>>>>>>>> StackOverflow question, but with no obvious way to satisfy that 
>>>>>>>> requirement:
>>>>>>>>
>>>>>>>> navigator.clipboard.readText()
>>>>>>>>
>>>>>>>> document.hasFocus()=false
>>>>>>>>
>>>>>>>> $doc.hasFocus()=true
>>>>>>>>
>>>>>>>> navigator.clipboard.readText failed: NotAllowedError: Document is
>>>>>>>> not focused.
>>>>>>>>
>>>>>>>>
>>>>>>>> navigator.clipboard.writeText()
>>>>>>>>
>>>>>>>> document.hasFocus()=false
>>>>>>>>
>>>>>>>> $doc.hasFocus()=true
>>>>>>>>
>>>>>>>> navigator.clipboard.writeText failed: NotAllowedError: Document is
>>>>>>>> not focused.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Is there any way to make this work in GWT?
>>>>>>>>
>>>>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "GWT Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/google-web-toolkit/9856ced4-a191-499c-9118-edc72ef6831fn%40googlegroups.com
>>> <https://groups.google.com/d/msgid/google-web-toolkit/9856ced4-a191-499c-9118-edc72ef6831fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> --
>> Thanks and regards,
>>  Pramod Patil
>>  Contact +91-8975432800 <+91%2089754%2032800>
>>
> --
> You received this message because you are subscribed to the Google Groups
> "GWT Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-web-toolkit/d0792d02-8185-464b-aa53-89179c2845a7n%40googlegroups.com
> <https://groups.google.com/d/msgid/google-web-toolkit/d0792d02-8185-464b-aa53-89179c2845a7n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Thanks and regards,
 Pramod Patil
 Contact +91-8975432800

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit/CAAXS9-X%3DfvtLiq0i3O7fTrcuBJoZraUrJHSpCBpkH0ukJMoviQ%40mail.gmail.com.

Reply via email to