readText(text -> {
   // Do whatever you want with the text, eg:
   GWT.log("The text: " + text);
});

Note:  It is returned asynchronously (not from the return statement), so 
you'll probably need to modify your calling code to cater for that.

On Wednesday, 4 January 2023 at 3:40:05 am UTC+11 [email protected] 
wrote:

> 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 <+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/e44b0c23-152d-4a89-ae2a-682275dbf182n%40googlegroups.com.

Reply via email to