Jump to content

360 Extreme Explorer Modified Version


Recommended Posts

What I am seeing, based solely on your information, is that Humming Owl's releases broke some javascript and then displayed it as text instead of performing the "function" that the javascript was intended to perform.

But that mine did not break the javascript so the broken code was not displayed as text.

 

Or, the broken javascript code is simply "dropped" / "ignored" by my builds but Humming Owl's doesn't know what to do with it so it displays it as text.

 

Not sure what you think needs "fixed" here.

If it sets your mind at ease, I opened that link and clicked the gigantic YOU in Dixel's v13 360Chrome, Humming Owl's v13 360Chrome, and my v12 360Chrome both in XP x64 SP2 and in Win7 x86 and all three gave me the EXACT results, letter for letter.

So then I installed Chrome v94.0.4606.71 in Win7 and it too gave me the same EXACT results.

 

Mozilla-based browser will give an entirely different view.

Maybe that "test page" is intentionally 'coded' to only work on Firefox and not on Chrome - who knows.

Link to comment
Share on other sites


In the latest v12 M build, under Settings/Basics/Manage search engines/Other search engines - have many search engines and other websites (12, with Time.is, DuckDuckGo, Gigablast.com, google.com, frogfind.com, Infinity Search, Okeano, oscobo.com, Swisscows..), which came in here by themselves, without me doing this myself...

All other 360Chrome v11, v12 and v13 builds by @Humming Owl and @ArcticFoxie present this same behavior here.  - tested with Time.is website.

Edited by msfntor
Time.is added, and other searches
Link to comment
Share on other sites

Those search engines are being added by a Chrome/Chromium "feature" called OpenSearch (Firefox, Safari, and Edge all do this also)  --  https://en.wikipedia.org/wiki/OpenSearch

Previously discussed here on MSFN  --  https://msfn.org/board/topic/182876-360-extreme-explorer-modified-version/?do=findComment&comment=1203764

I personally disable this "feature" through the use of a Tampermonkey userscript  --  https://greasyfork.org/en/scripts/37186-disable-opensearch/code

 

Edited by ArcticFoxie
Link to comment
Share on other sites

Very interesting @ArcticFoxie, this highjacking settings story, I look forward to the results of your (open) research!

 

...too another (google everywhere) story: sometimes, google creates the tab with its search page, with the sentence I've written here on MSFN... weird?..

...too this: I've started 360Chrome build, clicked on the search window...and accounts.google.com gmail login popup in the first tab... weird - I don't use gmail...

 

And another:

 

I've written in one of my precedent posts, about behavior of 360Chrome v9.5 M:

"If STYLES are off, then all results are on the left...see WAVE web accessibility evaluation tool (with WHOER.net report): https://wave.webaim.org/report#/whoer.net "

 

Searched for "no style information on some websites"... in Firefox - fix is easy: click View/Page Style/ then notch: "Basic Page Style".

But in chrome NO option to Enable/Disable Stylesheets ... if no styles are showing, the browser might not be handling the Stylesheets from some websites properly... 

Found these links:

A website looks weird: https://www.whatismybrowser.com/guides/troubleshooting/website/website-looks-weird

W3C Feed Validation Service: https://validator.w3.org/feed/

 

 

Edited by msfntor
links added
Link to comment
Share on other sites

Okay, this works to block all of the search engines that you cited.

 

// ==UserScript==
// @name Block OpenSearch Descriptions
// @author
// @description Block sites from adding search engines to Chrome.
// @downloadURL
// @grant
// @icon
// @include http*://*
// @require
// @run-at document-start
// @updateURL
// @version 2.0
// @namespace https://greasyfork.org/users/218540
// ==/UserScript==

//document.querySelector('[type="application/opensearchdescription+xml"]').remove();
//////////////////////////////////////////////////////////////////////////////
// Code from https://github.com/gregsadetsky/chrome-dont-add-custom-search-engines/blob/master/src/content.js
// OpenSearch - e.g., https://martin-thoma.com/search-engine-autodiscovery/
// Uses CSS4 selectors, Chrome 49+
const DEBUG=false;
let numseen=0, numspoiled=0;
let unspoiled=[];

// called when the user clicks an element of the form (any field or button).
// The parameter passed is the event object.
function clickApply(e) {
    if(DEBUG) console.info({'form onclick':e});
    // remove onclick. One fix only
    e.srcElement.form.removeEventListener("click", clickApply);
    applyFix(e.srcElement.form);
} //clickApply

// add a new <textarea> element
function applyFix(elem) {
  var newelem = document.createElement('textarea');
  newelem.name = '';
  newelem.style.display='none';
  elem.appendChild(newelem);
} //applyFix

// Add an extra child input to any form that only has one
function spoilFormGet(elem) {
    if(DEBUG) {
        ++numseen;
        unspoiled.push(elem);
    }

    // Check whether the form submits to a HTTP(S) URL.
    // A missing or relative action will be resolved against the page URL
    // so it must have the same URI scheme which is all we care about
    var action = elem.getAttribute('action');
    if(!(action && action.indexOf('://') >= 0)) action = location.href;
    if(!/^https?:\/\//i.test(action)) return;

    // Autodetection requires exactly one input of type text or search
    // If the type attribute is missing, it defaults to `text`
    // Readonly inputs do not count against this total
    if(elem.querySelectorAll(':scope input:-webkit-any([type="text" i],[type="search" i],[type*="search" i],[type=""],:not([type])):not([readonly])[name]:not([name=""])').length !== 1) return;

    // Autodetection also requires no password, file, or textarea elements
    if(elem.querySelector(':scope :-webkit-any(input[type="password" i],input[type="file" i],textarea)')) return;

    // Add a <textarea> - unlike <input>, it doesn't block implicit submission
    // per https://www.tjvantoll.com/2013/01/01/enter-should-submit-forms-stop-messing-with-that/

    // apply the fix now, or place it in onclick.  "this" is a parameter passed by foreach(). see below
    if (this.now === true) {
        // remove onclick placed during first pass
        elem.removeEventListener("click", clickApply);
        // and instead do it now;
        applyFix(elem);
    } else {
        elem.addEventListener('click', clickApply);
    }

    if(DEBUG) {
        console.info({Spoiled: elem});
        ++numspoiled;
        unspoiled.pop();
    }
} //spoilFormGet

var debugAutoDetect=0;

// move this part of the code here, since it's called multiple times
function autoDetect(now, when_called) {
    if(DEBUG) console.log('autoDetect: '+(++debugAutoDetect)+' ('+when_called+')');
    document.querySelectorAll('form:-webkit-any([method="get" i],:not([method]))').forEach(spoilFormGet,{now});
    if(DEBUG) {
        console.log(`Spoiled ${numspoiled}/${numseen}.`+(unspoiled.length?'  Unspoiled were:':'') );
        if (unspoiled.length) console.log(unspoiled);
    }

    // we reset spoil vars for next call
    numseen=0;
    numspoiled=0;
    unspoiled=[];
} //autoDetect

function catchOpenSearch() {
    if(DEBUG) console.info('catchOpenSearch called');
    // OpenSearch - e.g., https://martin-thoma.com/search-engine-autodiscovery/
    // Uses CSS4 selectors, Chrome 49+
    document.querySelectorAll('[type="application/opensearchdescription+xml" i]').forEach(
        function (it) {
            it.removeAttribute('type');
            if(DEBUG) console.info({"Spoiled by type removal": it});
        }
    );

    // Suggestion service, https://www.chromium.org/tab-to-search
    document.querySelectorAll('url[rel="suggestions" i]').forEach(
        function (it) {
            it.removeAttribute('rel');
            if(DEBUG) console.info({"Spoiled by rel removal": it});
        }
    );

  // added by ArcticFoxie
    document.querySelectorAll('url[rel="search" i]').forEach(
        function (it) {
            it.removeAttribute('rel');
            if(DEBUG) console.info({"Spoiled by rel removal": it});
        }
    );


} //catchOpenSearch

function onDOMContentLoaded() {
    if(DEBUG) console.log('onDOMContentLoaded');

    catchOpenSearch();

    // #1 call it now (i.e., DOMContentLoaded) without applying the fix
    // #2 call it in 1500 ms and apply the fix
    // #3 call when document loaded, and apply the fix.

    // if <form> is added/modified // dynamically before the document
    // is fully loaded, #1 could miss it, but not #2 & #3. Note that #2
    // could fire after #3 if the page is fast to load.  Once the fix
    // is applied, the <form> can't be found by subsequent execution
    // of autoDetect, so the fix can only be applied once (#1 is not
    // applied but delayed until #2 or #3 fires, or if the user
    // clicks).

    window.addEventListener('load', function() {
        if(DEBUG) console.log('onload');
        catchOpenSearch();
        autoDetect(true,'Load');
    } );  // #3
    setTimeout(function() { autoDetect(true,'Timer'); } ,1500);     // #2
    autoDetect(false,'onClick');                                    // #1

} //onDOMContentLoaded

(function() {
    document.addEventListener('DOMContentLoaded', onDOMContentLoaded);
    onDOMContentLoaded();
})();

Edited by ArcticFoxie
Link to comment
Share on other sites

4 hours ago, ArcticFoxie said:

Okay, this works to block all of the search engines that you cited.

  Reveal hidden contents

// ==UserScript==
// @name Block OpenSearch Descriptions
// @author
// @description Block sites from adding search engines to Chrome.
// @downloadURL
// @grant
// @icon
// @include http*://*
// @require
// @run-at document-start
// @updateURL
// @version 2.0
// @namespace https://greasyfork.org/users/218540
// ==/UserScript==

//document.querySelector('[type="application/opensearchdescription+xml"]').remove();
//////////////////////////////////////////////////////////////////////////////
// Code from https://github.com/gregsadetsky/chrome-dont-add-custom-search-engines/blob/master/src/content.js
// OpenSearch - e.g., https://martin-thoma.com/search-engine-autodiscovery/
// Uses CSS4 selectors, Chrome 49+
const DEBUG=false;
let numseen=0, numspoiled=0;
let unspoiled=[];

// called when the user clicks an element of the form (any field or button).
// The parameter passed is the event object.
function clickApply(e) {
    if(DEBUG) console.info({'form onclick':e});
    // remove onclick. One fix only
    e.srcElement.form.removeEventListener("click", clickApply);
    applyFix(e.srcElement.form);
} //clickApply

// add a new <textarea> element
function applyFix(elem) {
  var newelem = document.createElement('textarea');
  newelem.name = '';
  newelem.style.display='none';
  elem.appendChild(newelem);
} //applyFix

// Add an extra child input to any form that only has one
function spoilFormGet(elem) {
    if(DEBUG) {
        ++numseen;
        unspoiled.push(elem);
    }

    // Check whether the form submits to a HTTP(S) URL.
    // A missing or relative action will be resolved against the page URL
    // so it must have the same URI scheme which is all we care about
    var action = elem.getAttribute('action');
    if(!(action && action.indexOf('://') >= 0)) action = location.href;
    if(!/^https?:\/\//i.test(action)) return;

    // Autodetection requires exactly one input of type text or search
    // If the type attribute is missing, it defaults to `text`
    // Readonly inputs do not count against this total
    if(elem.querySelectorAll(':scope input:-webkit-any([type="text" i],[type="search" i],[type*="search" i],[type=""],:not([type])):not([readonly])[name]:not([name=""])').length !== 1) return;

    // Autodetection also requires no password, file, or textarea elements
    if(elem.querySelector(':scope :-webkit-any(input[type="password" i],input[type="file" i],textarea)')) return;

    // Add a <textarea> - unlike <input>, it doesn't block implicit submission
    // per https://www.tjvantoll.com/2013/01/01/enter-should-submit-forms-stop-messing-with-that/

    // apply the fix now, or place it in onclick.  "this" is a parameter passed by foreach(). see below
    if (this.now === true) {
        // remove onclick placed during first pass
        elem.removeEventListener("click", clickApply);
        // and instead do it now;
        applyFix(elem);
    } else {
        elem.addEventListener('click', clickApply);
    }

    if(DEBUG) {
        console.info({Spoiled: elem});
        ++numspoiled;
        unspoiled.pop();
    }
} //spoilFormGet

var debugAutoDetect=0;

// move this part of the code here, since it's called multiple times
function autoDetect(now, when_called) {
    if(DEBUG) console.log('autoDetect: '+(++debugAutoDetect)+' ('+when_called+')');
    document.querySelectorAll('form:-webkit-any([method="get" i],:not([method]))').forEach(spoilFormGet,{now});
    if(DEBUG) {
        console.log(`Spoiled ${numspoiled}/${numseen}.`+(unspoiled.length?'  Unspoiled were:':'') );
        if (unspoiled.length) console.log(unspoiled);
    }

    // we reset spoil vars for next call
    numseen=0;
    numspoiled=0;
    unspoiled=[];
} //autoDetect

function catchOpenSearch() {
    if(DEBUG) console.info('catchOpenSearch called');
    // OpenSearch - e.g., https://martin-thoma.com/search-engine-autodiscovery/
    // Uses CSS4 selectors, Chrome 49+
    document.querySelectorAll('[type="application/opensearchdescription+xml" i]').forEach(
        function (it) {
            it.removeAttribute('type');
            if(DEBUG) console.info({"Spoiled by type removal": it});
        }
    );

    // Suggestion service, https://www.chromium.org/tab-to-search
    document.querySelectorAll('url[rel="suggestions" i]').forEach(
        function (it) {
            it.removeAttribute('rel');
            if(DEBUG) console.info({"Spoiled by rel removal": it});
        }
    );

  // added by ArcticFoxie
    document.querySelectorAll('url[rel="search" i]').forEach(
        function (it) {
            it.removeAttribute('rel');
            if(DEBUG) console.info({"Spoiled by rel removal": it});
        }
    );


} //catchOpenSearch

function onDOMContentLoaded() {
    if(DEBUG) console.log('onDOMContentLoaded');

    catchOpenSearch();

    // #1 call it now (i.e., DOMContentLoaded) without applying the fix
    // #2 call it in 1500 ms and apply the fix
    // #3 call when document loaded, and apply the fix.

    // if <form> is added/modified // dynamically before the document
    // is fully loaded, #1 could miss it, but not #2 & #3. Note that #2
    // could fire after #3 if the page is fast to load.  Once the fix
    // is applied, the <form> can't be found by subsequent execution
    // of autoDetect, so the fix can only be applied once (#1 is not
    // applied but delayed until #2 or #3 fires, or if the user
    // clicks).

    window.addEventListener('load', function() {
        if(DEBUG) console.log('onload');
        catchOpenSearch();
        autoDetect(true,'Load');
    } );  // #3
    setTimeout(function() { autoDetect(true,'Timer'); } ,1500);     // #2
    autoDetect(false,'onClick');                                    // #1

} //onDOMContentLoaded

(function() {
    document.addEventListener('DOMContentLoaded', onDOMContentLoaded);
    onDOMContentLoaded();
})();

So could you put this code in all your 360Chrome builds, please?

Link to comment
Share on other sites

On 10/6/2021 at 8:15 AM, kwisomialbert said:

last update of v9 modified not opening some sites,,blank page.

the previous update works.

Starting with a clean profile might do the trick. Errors with certificates change when starting a new profile sometimes.

 

@msfntor This is the New Tab you want? (replace this one with the original) --> https://www.mediafire.com/file/mc0poj7m7y0na9p/newtab.zip/file

 

Cheers.

Link to comment
Share on other sites

23 hours ago, ArcticFoxie said:

Can't.

End users will have to install Tampermonkey then install that userscript.

Actually, it's not very important, this OpenSearch thing, unless a website with bad intentions gets into it - then in that case someone should definitely not make it default ..but delete it.
@ArcticFoxie, and @Humming Owl -  we look forward to your new 360Chrome builds!
good luck

Link to comment
Share on other sites

1 hour ago, msfntor said:

Actually, it's not very important, this OpenSearch thing, unless a website with bad intentions gets into it - then in that case someone should definitely not make it default ..but delete it.

The user has to USE the search engine in order for it to be added to the "other" list.

You can VISIT the search engine and it won't be added to the list, but if you USE the search engine then you basically "opted in" for it to be added.

I personally dislike this so I use Tampermonkey to prevent it.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...