Script funktioniert in Tampermonkey aber in Chrome Addon nicht

Schönen guten Abend an alle,

wie ihr seht bin ich neu bei euch hier im Forum und ich freue mich euch gefunden zu haben. Dann wende ich mich mal direkt mit einem Problemchen an euch und hoffe im Richtigen Foren Abschnitt zu sein.

Ich habe ein Script für ein Spiel, was sowohl im Tampermonkey (Chrome) und Greasemonkey (Firefox) funktioniert.

Nun habe ich mir eine Script Collection (mit noch mehr Scripts) für Chrome (was dann kostenlos über den Chrome Web Store zu erhalten ist) erstellt wo auch alle funktionieren bis auf das eine und ich finde absolut nicht heraus warum es so funktioniert in den Monkeys aber in der Chrome Collection nicht.
Auch wenn ich die Collection in Erweiterungen bei Chrome einfüge unter Entwicklermodus funktionieren alle ausser das eine.

Hier das Script:

// @name        C&C Tiberium Alliances Multi Session
// @namespace   http://*tiberiumalliances.com/*
// @namespace   https://*tiberiumalliances.com/*
// @include     http://*tiberiumalliances.com/*
// @include     https://*tiberiumalliances.com/*
// @icon        https://prodgame13.alliances.commandandconquer.com/146/favicon.ico
// @version     0.6
// @description Open Multi C&C Tiberium Alliances Session at one Browser
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// ==/UserScript==

var $;

function log_it(e){
    if (typeof console != 'undefined') console.log('[Multi-Session] ', e);
    else if (window.opera) opera.postError('[Multi-Session] '+ e);
    else GM_log('[Multi-Session] '+ e);   
}

(function(){
    log_it("Wait for load....");
    cnc_ms_run1();   
})();

function cnc_ms_run1() {
    var head = document.getElementsByTagName('head')[0];
    if(!head)  {
        log_it("Wait for load....");
        window.setTimeout(cnc_ms_run1, 100);
    } else {
        if (typeof unsafeWindow.jQuery == 'undefined') {
            log_it("No Jquery Load it....");
            
            var jQuery_js = unsafeWindow.document.createElement('script');
            
            jQuery_js.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js';
            jQuery_js.type = 'text/javascript';
            jQuery_js.async = true;
            
            
           // head.insertBefore(jQuery_js, head.firstChild);
           	//head.appendChild(jQuery_js);
            
        }
        cnc_ms_run2();
    }
}



var wait_counter = 0;


function cnc_ms_run2() {
    if (typeof unsafeWindow.jQuery == 'undefined' ) {
        log_it("Wait for Jquery.... ");
        wait_counter = wait_counter + 1;
        window.setTimeout(cnc_ms_run2, 100);
    } else {
        $ = unsafeWindow.jQuery.noConflict(true);
        log_it("Jquery.... Done");
        $('.p4fnav-block').prepend('<div style="display:block;float:left;cursor:pointer;"><div class="p4fnav-topnav-separator"></div><span name="new_session" class="p4fnav-url">New Session</span><div class="p4fnav-topnav-separator"></div>');          
        $('.returned-user').append(' - <b><span name="new_session" class="change-server" style="cursor:pointer;">New Session</span></b>');  
        
        
        $('[name="new_session"]').live("click", function(){
  			cncms_new_session();
		});
             
    }
}

  
function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca**;
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}


function cncms_new_session() {
    eraseCookie("JSESSIONID");
    eraseCookie("Rememberme");
    eraseCookie("commandandconquer_remember_me");
    eraseCookie("commandandconquer_remember_me_success");
    window.location.reload();
}

Ich hoffe das ihr mir bei diesem Problem behilflich sein könnt und dies schnellstmöglich behoben / geändert werden kann.

Mfg Ghostleader aka Alex

PS: Geschrieben ist es für diese Seite https://www.tiberiumalliances.com/de/home

[ot]
Willkommen. Hab’s mal aus den Java-Bereich in den JavaScript-Bereich geschoben. (Java und JavaScript haben so viel gemeinsam wie ein Wal und eine Walnuss :smiley: ). Da ich selbst von JavaScript keine Ahnung habe, kann ich ansonsten nur sagen, dass eine genauere Problembeschreibung/Eingrenzung (soweit möglich) hilfreich sein könnte. Das ist schon ein bißchen viel code, um „den“ Fehler durch Draufschauen zu finden…
[/ot]

Hallo Marco13,

danke erstmal für´s verschieben :wink: .

Ja viel mehr an Eingrenzung ist da nicht, in Tampermonkey und Greasemonkey funktioniert es als einzel Skript, aber in der Collection bei Google Chrome startet es halt nicht. Ich kann es in dieser auswählen, die Auswahl speichern aber das Script wird dann trotzdem nicht ausgeführt.

Mfg Ghosty aka Alex

Das dürfte die Ursache sein:

Chromium does not support @require, @resource, unsafeWindow, GM_registerMenuCommand, GM_setValue, or GM_getValue.
GM_xmlhttpRequest is same-origin only.

Quelle

TL;DR: Chrome ist aus Sicherheitsgründen strenger als Tamper/Greasemonkey und erlaubt bestimmte Funktionen nicht.

Hallo darekkay,

danke für deine Antwort.

Hast du vielleicht eine Idee für mich wie ich dies ersetzen kann und es trotzdem funktioniert :slight_smile:

Mfg Ghostleader aka Alex

Wenn ich das richtig sehe, brauchst du diese Funktionen nur, um JQuery zu laden. Auf StackOverflow sind mehrere Methoden aufgelistet, wie man das anders lösen kann.

Hallo darekkay,

danke erstmal für den Link. Ich habe mir dies mal angeschaut verstehe auch was du mir sagen willst, muss aber leider zugeben das ich gerade nicht wirklich sehe wie ich dies dann in dem von mir gepostetem Script umbauen muss :frowning: bin da echt gerade etwas überfordert leider.

Wenn ich das richtig verstehe, muss function cnc_ms_run1 () und funktion ncn_ms_run2 () umgebaut werden aber ich sehe da nicht genau wie ich das in dem Thema gepostetem auf das meinige umsetzen kann/muss.

Sehe ich das mit den beiden functionen schon mal richtig und hast vielleicht noch nen Ansatz für mich büdde? Wie gesagt bin noch recht neu und bisher hatte ich diese Probleme nicht.
Habe allerdings gerade festgestellt das Tampermonkey beta dies seid seinem Update (glaube gestern) auch net mehr zu unterstützen scheint, das normale jedoch schon.

Mfg Ghostleader aka Alex

Die CC Seite nutzt bereits jQuery - du brauchst es also nicht noch mal zu laden. Außerdem wird ein Userscript standardmäßig erst ausgeführt, wenn die Seite vollständig geladen ist. Das hier sollte also reichen (ungetestet):


// ==UserScript==
// @name        C&C Tiberium Alliances Multi Session
// @namespace   tiberiumalliances.com
// @include     http://*tiberiumalliances.com/*
// @include     https://*tiberiumalliances.com/*
// @icon        https://prodgame13.alliances.commandandconquer.com/146/favicon.ico
// @version     0.6
// @description Open Multi C&C Tiberium Alliances Session at one Browser
// ==/UserScript==
 
$('.p4fnav-block').prepend('<div style="display:block;float:left;cursor:pointer;"><div class="p4fnav-topnav-separator"></div><span name="new_session" class="p4fnav-url">New Session</span><div class="p4fnav-topnav-separator"></div>');          
$('.returned-user').append(' - <b><span name="new_session" class="change-server" style="cursor:pointer;">New Session</span></b>');  

$('[name="new_session"]').live("click", function(){
	cncms_new_session();
});
 
function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}
 
function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca**;
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}
 
function eraseCookie(name) {
    createCookie(name,"",-1);
}
 
 
function cncms_new_session() {
    eraseCookie("JSESSIONID");
    eraseCookie("Rememberme");
    eraseCookie("commandandconquer_remember_me");
    eraseCookie("commandandconquer_remember_me_success");
    window.location.reload();
}

Hallo darekkay,

vielen herzlichen Dank an dich, so funktioniert es einwandfrei :smiley: :smiley: :smiley:

Mfg Ghostleader aka Alex