Robin S Posted July 6, 2017 Share Posted July 6, 2017 Thanks @Roope! The hook didn't work within the page template (maybe too late there) but did work in /site/ready.php Link to comment Share on other sites More sharing options...
gebeer Posted September 6, 2018 Share Posted September 6, 2018 On 9/28/2016 at 10:30 AM, Bacelo said: <?php echo '<script src="' . $config->urls->siteModules . 'EmailObfuscation/emo.min.js"></script>'; ?> This works fine as before - the script gets included just fine. But, none of the included E-Mails addresses are replaced with any text and elements at all. They are still untouched present in plain text. I ran into a similar issue with v1.1.0. using Javascript Loading method: Load file to $config->scripts emo.min.js is included on the page before the <!-- emo --> script block which defines var emo_addr. The function emo_replace() never gets called because at the point of script inclusion emo_addr === undefined. In v1.5 of emo.js window.onload was removed. So the script never executes when emo.min.js is included before the <!-- emo --> script block. I have refactored emo.js as an object literal and modified the module Code so that the script block calls emo.init(emo_addr) after defining the addresses. Tested without problems. Modified module can be found at https://github.com/gebeer/EmailObfuscation/tree/dev @Roope do you want a PR for that? Link to comment Share on other sites More sharing options...
Roope Posted January 2, 2019 Author Share Posted January 2, 2019 Hello @gebeer! I made a convert to object literal on your supposal but it had issue when "JavaScript loading method" was set to:manual (where emo.js is loaded after the inline script block). So script init is now again attached to the window onload event and emo.js can be included at any part of page. Thanks for the report! I also dropped ProcessWire namespace for continued 2.x support, thanks for a remind @Robin S! That was maybe too hesitated and no requirements for it. Version bumped to 1.1.1 and it's available at GitHub:https://github.com/BlowbackDesign/EmailObfuscation/releases/tag/1.1.1 Besides bugfixes this version adds support to multilanguage nosript text and template cache. 2 Link to comment Share on other sites More sharing options...
SiWhitt Posted February 13, 2019 Share Posted February 13, 2019 I updated to the latest version of this module today and I've just noticed that it doesn't appear to be working when looking at my site using Chrome, Firefox is fine though, still working as expected – http://houseofdeadleg.co.uk/contact/ Link to comment Share on other sites More sharing options...
dragan Posted February 13, 2019 Share Posted February 13, 2019 works fine in my Chrome though... Link to comment Share on other sites More sharing options...
SiWhitt Posted February 18, 2019 Share Posted February 18, 2019 Looking a bit closer at this, it looks like it's just Chrome on an Android mobile, desktop sees to be OK now. Every other browser I've tried is fine. Link to comment Share on other sites More sharing options...
AndZyk Posted September 26, 2019 Share Posted September 26, 2019 On 1/12/2017 at 10:23 AM, PWaddict said: How can I re-initiate it via AJAX? On 1/12/2017 at 2:41 PM, Roope said: Currently this is not possible. Would be really great, if this module could be used via Ajax. ? Link to comment Share on other sites More sharing options...
Roope Posted February 24, 2020 Author Share Posted February 24, 2020 New EMO version 1.2.0 released! https://github.com/BlowbackDesign/EmailObfuscation/releases/tag/1.2.0 In this version only encryption key is stored in the emo object of html document and crypted email strings as data attributes to span elements that are used to replace found email addresses. This makes it possible to obfuscate emails generated within AJAX request. There is also a new option at module config to lock the encryption key so that it does not change on every session like it does by default. This is required if you are caching AJAX output for more than session lifetime. Otherwise this option is good leave disabled. Here is quick example of a simple AJAX request with obfuscated output: <?php namespace ProcessWire; if($config->ajax) { $str = "<p><a href='mailto:foo@bar.com'>Click to mail</a></p>"; // auto obfuscation works only when complete html document is rendered so you // need to do manual obfuscation on AJAX calls even when mode is set to auto echo $sanitizer->emo($str); return $this->halt(); } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>EMO ajax example</title> </head> <body> <p>john@doe.com</p> <div id="result"></div> <p><button onclick="sendExample()">Show me some</button></p> <script> var sendExample = function() { var xhttp = new XMLHttpRequest(); xhttp.open("POST", "<?= $page->url ?>", true); xhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xhttp.onreadystatechange = function() { if(this.readyState == 4 && this.status == 200) { document.getElementById("result").innerHTML = xhttp.response; // run emo init when there's something new to digest emo.init(); } }; xhttp.send(); }; </script> </body> </html> 4 Link to comment Share on other sites More sharing options...
grimezy Posted February 25, 2020 Share Posted February 25, 2020 Just a warning, this seems to have a conflict with SEO Maestro module? I can't diagnose much as I'm at work and it's very busy at the moment. Can anyone else confirm this? Thanks. Link to comment Share on other sites More sharing options...
Roope Posted March 2, 2020 Author Share Posted March 2, 2020 On 2/25/2020 at 5:10 AM, grimezy said: Just a warning, this seems to have a conflict with SEO Maestro module? I can't diagnose much as I'm at work and it's very busy at the moment. Can anyone else confirm this? Thanks. I can't confirm. Running PW 3.0.123 + latest versions on both of modules. What kind of issues are you facing? Link to comment Share on other sites More sharing options...
gebeer Posted March 3, 2020 Share Posted March 3, 2020 (edited) I am having a different issue. With v1.2.0. I get this warning: Warning array_key_exists() expects parameter 2 to be array, null given File: .../EmailObfuscation/EmailObfuscation.module:352 352 if(!is_array($options) && !array_key_exists('pageStack', $options)) { return false; } If $options passes the first test, it is not an array. The second test checks for array_key_exists in a non-array. Hence the warning. The error is being triggered when $options is null. As a temp workaround I amended the if statement to read if(is_array($options) && !array_key_exists('pageStack', $options)) { return false; } Not sure though if this is correct. Maybe you wanted to return false when $options is not an array, too? Edited March 3, 2020 by gebeer typo Link to comment Share on other sites More sharing options...
Roope Posted March 3, 2020 Author Share Posted March 3, 2020 Hello @gebeer (and @grimezy) and thanks for the info! I was able to reproduce this and it was purely silly mistake I made when I was rearranging stuff. The is_array check in this condition is there only to prevent such a warning in array_key_exists function. This is now fixed in 1.2.1 version. And finally in 1.2.2 version. While I was there I also added conditional autoload to block admin pages which is proposed by @tpr in this thread already long ago. Thanks! 2 Link to comment Share on other sites More sharing options...
grimezy Posted March 4, 2020 Share Posted March 4, 2020 Thanks @Roope! This has fixed the issues I was having. Link to comment Share on other sites More sharing options...
CalleRosa40 Posted March 25, 2020 Share Posted March 25, 2020 Hi, I had this piece of code in my template file's head section, a fix for older IE browsers: <!--[if lt IE 9]> <script src="<?=$config->urls->templates?>js/html5-3.6-respond-1.4.2.min.js"></script> <script src="<?=$config->urls->templates?>js/rem.min.js"></script> <![endif]--> EMO 1.2.2 inserted its own code inside the conditional comment which resulted in it not working properly (in browsers other than old IE, of course): <!--[if lt IE 9]> <script> var emo = emo || {}; emo.key = 'PDHeN7ZbGViB1m0ATUpc5rC3tY_8fgEqkl6dw2nMKQSLxWouahI.4vJFyOXzs9Rj'; </script> <script src="/site/templates/js/html5-3.6-respond-1.4.2.min.js"></script> <script src="/site/templates/js/rem.min.js"></script> <![endif]--> I don't know the exact way EMO determines where to place its code, but it should probably make sure its JS does not end up in any conditional comment. Apart from that, thanks a lot for a very useful module. Michael Link to comment Share on other sites More sharing options...
Brian Williamson Posted March 30, 2020 Share Posted March 30, 2020 the "enable Javascript" message is currently appearing in both Chrome and Safari for Mac in place of email addresses. EMO is inserting into a conditional comment, as noted by Michael. Link to comment Share on other sites More sharing options...
Roope Posted March 30, 2020 Author Share Posted March 30, 2020 Hello @CalleRosa40 and @Brian Williamson! And thanks for the notice! The logic with EMO insert changed at 1.2.x update and I haven't got time to push the update yet so in a meantime please use the version 1.1.1 instead as it works without any issues. I'll try to find some time to fix the script insert to head ASAP! https://github.com/BlowbackDesign/EmailObfuscation/releases/tag/1.1.1 2 Link to comment Share on other sites More sharing options...
creativejay Posted April 3, 2020 Share Posted April 3, 2020 Can also confirm that the latest version affects email addresses entered in a FormBuilder field, so the visitor gets an "Invalid content" error but can't see any reason why they should. Link to comment Share on other sites More sharing options...
Robin S Posted April 11, 2020 Share Posted April 11, 2020 @Roope, a feature request: it would be great if it was possible to avoid the email replacement within elements that are given a particular HTML class, e.g. "no-emo". My current issue is that if I show an email address as the value of a text input or textarea then EMO replaces those strings, which create invalid markup. Probably EMO shouldn't touch emails that are the values of form elements, but it would also be handy to be able to disable EMO inside other elements so I thought I'd request that class option. 1 Link to comment Share on other sites More sharing options...
Roope Posted April 16, 2020 Author Share Posted April 16, 2020 Hi all! Issue with script insert to the head section is now fixed in version 1.2.3 https://github.com/BlowbackDesign/EmailObfuscation/releases/tag/1.2.3 @CalleRosa40 and @Brian Williamson please update and report back if you're still facing any problems. @creativejay and @Robin S - EMO has skipped form tags on obfuscation since day one and I haven't been able to reproduce this error so I'm kind of lost here why are you guys facing this issue with recent 1.2.x update. For example, none of the addresses in the markup below are not touched: <form action="/"> <p>john@doe.com</p> <input type="text" name="email" value="john@doe.com"> <textarea name="message">john@doe.com</textarea> </form> Using no-emo class on element to avoid obfuscation is a nice idea but not so easy to implement safely to the current logic based on regular expressions. 1 Link to comment Share on other sites More sharing options...
Robin S Posted April 16, 2020 Share Posted April 16, 2020 1 hour ago, Roope said: EMO has skipped form tags on obfuscation since day one and I haven't been able to reproduce this error To reproduce, put an input element in your template that is not within a form. <input type="text" value="someone@domain.com"> It's valid to use inputs, textareas, etc outside of a form element. 1 Link to comment Share on other sites More sharing options...
Roope Posted April 17, 2020 Author Share Posted April 17, 2020 On 4/17/2020 at 1:25 AM, Robin S said: It's valid to use inputs, textareas, etc outside of a form element. Yes, I'm well aware that it is completely valid to have inputs and such outside of a form element and with email address EMO breaks the markup but I thought this was not the issue in your case since there was already previous post from creativejay about problems with FormBuilder and you also mentioned that EMO shoudn't touch values of form elements but you were literally talking about inputs and such, not the form element itself. Sorry about that. There are also another technically valid situations where EMO fails e.g. like having an email inside data attribute. Generally it is kind of compicated topic to automatically replace email address by new node in every possible case without breaking things. Anyway, current state where EMO skips whole content inside form element is not ideal since there are many cases where you can have email addresses inside form where they should get obfuscated but currenly are not. Like the one in my previous form example where email inside p element should be touched but it's not. That said maybe we should remove the form element completely from ignored elements and concentrate only at form elements (what you suggested actually) like input, option and textarea where most likely touching email addresses will give us headaches. I'll look into it. 3 Link to comment Share on other sites More sharing options...
Robin S Posted July 17, 2020 Share Posted July 17, 2020 @Roope, I've noticed that the "Enable JavaScript to view protected content" notice appears for significantly longer in >= v1.2.0 than it did in v1.1.1. In the screencasts below I'm refreshing the page and I've used my browser dev tools to slow the network speed down to "Fast 3G" to make the effect more obvious. In both cases the EMO script should already be in the browser's cache. v1.1.1 v1.2.3 Is there some way to speed things up so performance is closer to the older version? A couple of other little things... 1. Could you look at appending the module version number to the JS file src as a cache-busting querystring? Without that there can be problems if you upgrade/downgrade the module and the visitor has the JS from a different version cached in their browser. 2. I wonder if the module could use a <noscript> tag in some way so that the "Enable JavaScript to view protected content" is only visible to visitors who have JS disabled. If the visitor has JS enabled but EMO has not yet decoded the email address then the notice doesn't need to be seen and this would avoid the FOUC. 1 Link to comment Share on other sites More sharing options...
Roope Posted October 20, 2020 Author Share Posted October 20, 2020 Hello @Robin S - and thanks for your efforts! I've optimized the auto init a bit so that it kicks in earlier and now it is in the line with 1.1 version. Or actually it is slightly faster and FOUC is almost unvisible. I also implemented the other two suggestions that you had: Wrapped replace text to noscript tag instead of span that prevents FOUC completely. Also added version number to JS autoload filename as a query string. While I was there I replaced skipped form tag with individual form elements and also added couple of attributes to the mix. Now obfuscation is skipped in following: Tags: head, script, textarea, option, output, input Attributes: value, label, data Version 1.2.4 is available at Github: https://github.com/BlowbackDesign/EmailObfuscation/releases/tag/1.2.4 1 Link to comment Share on other sites More sharing options...
Robin S Posted October 20, 2020 Share Posted October 20, 2020 @Roope, thanks for the update. However, the update wasn't encoding email addresses for me. After some debugging I think the problem is that this... "((?:<(?:head|script|textarea|option|output)).*(?:<\/(?:head|script|textarea|option|output)>))" ...and this... if(!in_array(substr($str, 0, 5), array('<head', '<scri', '<text', '<opti', '<outp', '<inpu', 'value', 'label', 'data-'))) { ...result in the HTML getting split on the <header> tag and then email addresses following that tag are not encoded. 1 Link to comment Share on other sites More sharing options...
Roope Posted October 21, 2020 Author Share Posted October 21, 2020 @Robin S - now fixed, thanks! 2 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now