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 google-web-toolkit+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit/32d59fe6-2583-4d51-9713-dcb28637c9afn%40googlegroups.com.

Reply via email to