Thank you for looking at this for me.  I do see that i missed an  = in the 
if.  thanks.  Quickie small script created to show the problem.
So if jQuery isn't allowed to touch things in the page could you show me an 
example of how one could click using jQuery in the page?
In this specific case the page itself already has jQuery too (so I've had 
to alias my jQuery) so I could call the jQuery in the page - if I knew how 
to do it.   

My basic problem remains the same - I don't understand how to call 
something in the page when I have @grant set.   If you could 
give me a really brief snippet I'm sure I could work from there to 
understand the rest of the items that need to modify things in the page.
Interestingly if I use jQuery to modify elements in the page I don't have 
any issue.   I change text, I rearrange things, etc.   But when
I do this specific click (and other clicks) it's failing.   I wouldn't mind 
using a homebrew (altered) version of jQuery in the script.  I already
have a number of patches to jQuery (plugins) included in the script. 
 Adding another replacement routine wouldn't be a big deal if I could
learn how to actually work in the page.  

On Friday, July 18, 2014 2:59:27 AM UTC-4, TheVindicar wrote:
>
> Ok, I think I got to the bottom of this.
> The problem is in jQuery.event.trigger(), in following lines:
>
>       // Native handler
>       handle = ontype && cur[ ontype ];
>       if ( handle && jQuery.acceptData( cur ) && handle.apply && 
> handle.apply( cur, data ) === false ) {
>
>               event.preventDefault();
>       }
>
> handle() is a page-scope function, and jQuery tries to call it while passing 
> script-scope data object as parameter.
>
>       handle.apply( cur, data )
>
> Of course, it doesn't end well. I was unable to quickfix it by inserting a 
> call to cloneInto(), as for some reason it returns an error when I attempt to 
> export data.
>
> You could file a bug to jQuery developers, but I'm unsure if they will try to 
> fix it - after all, jQuery wasn't specifically intended to be used in 
> userscripts.
>
> It's not just click() - any time jQuery does something like this, you will 
> run into problems.
>
> So the only way to work around it I can think of is to inject jQuery into the 
> target page and work there, using postMessage() or user-defined events to 
> communicate with priviledged code...
>
>
>
> 2014-07-18 10:27 GMT+04:00 Vindicar <[email protected] <javascript:>>:
>
>>  if (thisvalue="Finish Job")
>>
>> I do believe you have a typo here, but it's unrelated to the fact click() 
>> causes an error. So far I dug into event.trigger() routine.
>>
>>
>> 2014-07-18 2:42 GMT+04:00 Daniel Wynalda <[email protected] <javascript:>
>> >:
>>
>> Here's a copy of a sample script. 
>>> http://hithuntheal.com/x.user.js  <http://hithuntheal.com/x.user.js>
>>> (also inserted/pasted below) 
>>>
>>>
>>> It acts on the following URL:  
>>> http://hithuntheal.com/x.php
>>> It simply clicks the button.  (I've reduced my 50000 line script down to 
>>> just the sample code showing the issue).
>>> But this script won't click the button.  It finds the button -- it can 
>>> see the button's properties.  But it can't click the button as jQuery ends 
>>> with the error.
>>>
>>> Now... If you remove the @grant lines and replace them with @grant none 
>>> then this script will work just fine.  
>>> This is what's confusing me.  I'm not doing anything exotic in this 
>>> script sample.  I'm clicking a button.  I can see the button, I can get 
>>> properties from the button.  I simply can't click the button.
>>> My script has to have GM_getValue and GM_setValue because it runs cross 
>>> domain and the entire value of the script is maintaining data between 
>>> websites to use on other websites... 
>>>
>>> // ==UserScript==
>>> // @name           TEST CLICK BUTTON
>>> // @namespace      http://hithuntheal.com/x.user.js
>>> // @description    Hitlist hunt heal and level combined
>>> // @grant GM_setValue
>>> // @grant GM_getValue
>>> // @include *hithuntheal.com/*
>>> // @icon http://www.hithuntheal.com/hhhicon.ico
>>> // @require       
>>> http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js
>>> // ==/UserScript==
>>>
>>>
>>>
>>> jQuery(".formInputButton").each(function(index)
>>> {
>>>  var thisvalue=$(this).attr('value');
>>> if (thisvalue="Finish Job")
>>> {
>>>  alert('found button !');
>>> $(this).click();
>>> }
>>>  });
>>>
>>>
>>> On Thursday, July 17, 2014 12:51:59 PM UTC-4, TheVindicar wrote:
>>>
>>>> I used this snippet to illustrate my undestanding of how scurity scopes 
>>>> work.
>>>> jQuery is taken from unsafeWindow, and thus runs with page level of 
>>>> privilege.
>>>> The code itself is run in script scope, so empty array and anonymous 
>>>> function are also created in script scope.
>>>> That's why page-defined jQuery fails to access them.
>>>>
>>>> You're using script-scope jQuery, so it should work just fine in my 
>>>> scenario.
>>>> As for yours... say again:
>>>> 1. Where and how is click handler installed?
>>>> 2. Where and how is .click() called?
>>>>
>>>>
>>>> 2014-07-17 16:23 GMT+04:00 Daniel Wynalda <[email protected]>:
>>>>
>>>> I think what I'm having trouble with is understanding the use of 
>>>>> cloneInto.
>>>>>
>>>>> You mentioned this code:
>>>>>  $.each( 
>>>>>       cloneInto([], unsafeWindow),
>>>>>       exportFunction(function(){}, unsafeWindow)
>>>>>   );
>>>>>
>>>>> But I don't understand it.  Is this suppose to replace the .each() 
>>>>> inside jQuery?  
>>>>>
>>>>> The .each seems to be running fine and I get the content that I expect 
>>>>> with jquery (the text is visible, as is the .onClick routine that is in 
>>>>> the 
>>>>> code).   What I can't do is actually click the element (perhaps because 
>>>>> it 
>>>>> has an onclick and that is in the page scope??)
>>>>>
>>>>>
>>>>> On Thursday, July 17, 2014 5:46:48 AM UTC-4, TheVindicar wrote:
>>>>>
>>>>>> Let me guess, you're trying to use jQuery provided by target page? 
>>>>>> Following code will fail:
>>>>>>
>>>>>>   var $ = unsafeWindow.jQuery;
>>>>>>   $.each([], function(){});
>>>>>>
>>>>>>  Since $.each() is a function from page scope, and array and function 
>>>>>> are both in more priviledged script scope, jQuery will fail to access 
>>>>>> their 
>>>>>> properties (like Array.length and Function.call).
>>>>>> There are two ways to work around it. Either you can export 
>>>>>> everything you need explicitly (though strings and numbers don't have to 
>>>>>> be 
>>>>>> exported):
>>>>>>
>>>>>>   $.each( 
>>>>>>       cloneInto([], unsafeWindow),
>>>>>>       exportFunction(function(){}, unsafeWindow)
>>>>>>   );
>>>>>>
>>>>>> Or you can run the page-modifying code entirely inside the page scope 
>>>>>> via script tag injection:
>>>>>>
>>>>>>   function RunInPage(func) {
>>>>>>       var s = document.createElement("script"); 
>>>>>>       s.textContent = "(" + func + ")();"; 
>>>>>>       document.body.appendChild(s);
>>>>>>       setTimeout(function(){document.body.removeChild(s)}, 0);
>>>>>>   }
>>>>>>   RunInPage(function(){
>>>>>>       //you can use page-scope code (like jQuery if the page uses it) 
>>>>>> here freely - entirety of this script is run in page scope.
>>>>>>       var $ = window.jQuery;    $.each([], function(){});
>>>>>>   });
>>>>>>
>>>>>>
>>>>>> The latter method is much easier if you don't need to make 
>>>>>> priviledged calls from the page scope (i.e. you don't have an event 
>>>>>> handler 
>>>>>> that calls GM_setValue(), don't use GM_xmlHttpRequest(), and so on). One 
>>>>>> drawback is that you can't use closures with it. Following code will 
>>>>>> give 
>>>>>> you 'undefined':
>>>>>>
>>>>>>   var my_settings = {settings : GM_getValue( 'settings', 'default' )};
>>>>>>   RunInPage(function(){
>>>>>>       alert(my_settings);  
>>>>>>   });
>>>>>>
>>>>>> It seems that a good way to pass values into page scope would be this:
>>>>>>
>>>>>>   var my_settings = {settings : GM_getValue( 'settings', 'default' )}
>>>>>>   unsafeWindow.my_settings = cloneInto(my_settings, unsafeWindow);
>>>>>>   RunInPage(function(){
>>>>>>       alert(window.my_settings);
>>>>>>   });
>>>>>>
>>>>>>
>>>>>> Mind that settings object better not include any functions.
>>>>>>
>>>>>>
>>>>>> 2014-07-16 20:03 GMT+04:00 Daniel Wynalda <[email protected]>:
>>>>>>
>>>>>> If possible could you post an example of how you used cloneInto() in 
>>>>>>> your greasemonkey script to inject something?  My scripts also broke 
>>>>>>> with 
>>>>>>> greasemonkey 2.0 deployment and they are all failing inside jQuery so I 
>>>>>>> don't know what to do to try to fix them.   Simple things like:
>>>>>>>
>>>>>>> $(this).click(); 
>>>>>>>
>>>>>>> no longer work -- and Firefox is giving this error:
>>>>>>> Permission denied to access property 'length'.
>>>>>>>
>>>>>>> I know it's finding the item (I have logged the content).  It works 
>>>>>>> fine in Greasemonkey 1.5.   I am guessing this has something to do with 
>>>>>>> the 
>>>>>>> scope changes - but I have no idea how to work around them.  I'm not 
>>>>>>> trying 
>>>>>>> to inject anything into the web page.  I'm just trying to click a DIV 
>>>>>>> element....
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tuesday, July 15, 2014 7:53:50 AM UTC-4, TheVindicar wrote:
>>>>>>>
>>>>>>>> Well, I solved it in a different manner. I run everything I can in 
>>>>>>>> script scope, load settings into an object, then export that object 
>>>>>>>> into 
>>>>>>>> unsafeWindow via cloneInto() and run the rest in page scope via script 
>>>>>>>> tag 
>>>>>>>> injection. 
>>>>>>>> It works for simple scripts that don't need to call priviledged 
>>>>>>>> calls from pages scope. If you do need it, you might want to use 
>>>>>>>> addEventListener()/postMessage() combo.
>>>>>>>>
>>>>>>>>
>>>>>>>> 2014-07-15 3:33 GMT+04:00 Dr Sr <[email protected]>:
>>>>>>>>
>>>>>>>>>  Same here, half a dozen scripts broken. The easiest way is to 
>>>>>>>>> use "@grant none <http://wiki.greasespot.net/@grant>", so your 
>>>>>>>>> script runs in the page context and can carry on as before. Replace 
>>>>>>>>> "unsafeWindow" with "window". You lose access to all the GM_ calls, 
>>>>>>>>> but if 
>>>>>>>>> you're only using GM_getValue()/setValue() anyway, see the 
>>>>>>>>> compatibility 
>>>>>>>>> shim in the above link for a drop-in replacement that uses 
>>>>>>>>> localStorage.
>>>>>>>>>
>>>>>>>>> On Sunday, July 13, 2014 12:57:16 AM UTC+12, TheVindicar wrote:
>>>>>>>>>>
>>>>>>>>>> Where can I read about writing scripts in accordance with new 
>>>>>>>>>> API? Since now I can't even iterate over page-defined jQuery 
>>>>>>>>>> collection 
>>>>>>>>>> using script-defined callback, every single one of my scripts is 
>>>>>>>>>> broken.
>>>>>>>>>>
>>>>>>>>>> Pretty much all of them use the same scheme:
>>>>>>>>>> 1. load settings into object via GM_getValue()
>>>>>>>>>> 2. find and modify some DOM nodes according to the settings
>>>>>>>>>> 3. (optionally) replace some functions in the target page with my 
>>>>>>>>>> own versions
>>>>>>>>>>
>>>>>>>>>> Now I fail to understand how do I do that using cloneInto() and 
>>>>>>>>>> exportFunction(). The fact Firefox shows wrong line number in error 
>>>>>>>>>> message 
>>>>>>>>>> doesn't help either.
>>>>>>>>>>
>>>>>>>>>  -- 
>>>>>>>>> You received this message because you are subscribed to a topic in 
>>>>>>>>> the Google Groups "greasemonkey-users" group.
>>>>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>>>>>>>> topic/greasemonkey-users/SXfpyvcQofQ/unsubscribe.
>>>>>>>>> To unsubscribe from this group and all its topics, send an email 
>>>>>>>>> to [email protected].
>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> Visit this group at http://groups.google.com/group
>>>>>>>>> /greasemonkey-users.
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>>  -- 
>>>>>>> You received this message because you are subscribed to a topic in 
>>>>>>> the Google Groups "greasemonkey-users" group.
>>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to
>>>>>>> pic/greasemonkey-users/SXfpyvcQofQ/unsubscribe.
>>>>>>> To unsubscribe from this group and all its topics, send an email to 
>>>>>>> [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> Visit this group at http://groups.google.com/group
>>>>>>> /greasemonkey-users.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>  -- 
>>>>> You received this message because you are subscribed to a topic in the 
>>>>> Google Groups "greasemonkey-users" group.
>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>>>> topic/greasemonkey-users/SXfpyvcQofQ/unsubscribe.
>>>>> To unsubscribe from this group and all its topics, send an email to 
>>>>> [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at http://groups.google.com/group/greasemonkey-users.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>  -- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "greasemonkey-users" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/greasemonkey-users/SXfpyvcQofQ/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to 
>>> [email protected] <javascript:>.
>>> To post to this group, send email to [email protected] 
>>> <javascript:>.
>>> Visit this group at http://groups.google.com/group/greasemonkey-users.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"greasemonkey-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/greasemonkey-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to