Home > Javascript, Tips > Il decennium bug del javascript

Il decennium bug del javascript

8 Giugno 2010

Da un po’ di tempo, come solitamente faccio, avevo dato poca importanza ad un avviso di questo tipo (vedi immagine) su parecchi siti (di non vitale importanza) realizzati in Flash nel passato.

Already have Flash Player? Click here if you have Flash Player 6 installed.

Already have Flash Player? Click here if you have Flash Player 6 installed.

Che so… sarà Safari? Mi dicevo… e continuavo a dare poca importanza… Però strano, ho sempre aggiornato il Flash Player… Apro Mozilla, idem. Solo IE su WinSozz non sembrava risentire del problema (normale: è un browser anomalo). Bene: è ora di affrontare il problema alla radice…


Apro il file flashdetect.js col quale gestivo ai tempi la detection della versione di Flash, e scorgo tale linea:
flashversion = y.charAt(y.indexOf(‘.’)-1);
Bene: quante cifre ha il n° 10 della versione di Flash attuale? Mi gratto la testa e mi chiedo se non sarà il caso di cambiare un po’ il codice? Detto, fatto:
flashversion = parseInt( y.substr( y.indexOf(‘.’)-2,2) );
Mela-F

flashobject21

flashobject21

Salvo e carico! Voilà.
Decennium bug di flashobject.js corretto!

Categorie:Javascript, Tips Tag:
  1. Maurizio
    14 Settembre 2010 a 14:30 | #1

    CIAO 🙂
    GRAZIE DELLA TUA SPIEGAZIONE … MA … HO PROVATO A CERCARE NEL MIO FILE E FARE UN COPIA INCOLLA
    MA MI DA ERRORE …. MI SAPRESTI DIRE, ALLORA, IN QUESTO CODICE CHE TI ALLEGO COSA BISOGNA CAMBIARE ???
    GRAZIE 1000
    MAurizio

    /*
    * FlashObject embed
    *
    * by Geoff Stearns (geoff@choppingblock.com, http://www.choppingblock.com/)
    *
    * v1.0.7 – 11-17-2004
    *
    * Create and write a flash movie to the page, includes detection
    *
    * Usage:
    *
    * myFlash = new FlashObject(“path/to/swf.swf”, “swfid”, “width”, “height”, flashversion, “backgroundcolor”);
    * myFlash.altTxt = “Upgrade your Flash Player!”; // optional
    * myFlash.addParam(“wmode”, “transparent”); // optional
    * myFlash.addVariable(“varname1”, “varvalue”); // optional
    * myFlash.addVariable(“varname2”, getQueryParamValue(“myvar”)); // optional
    * myFlash.write();
    *
    */

    FlashObject = function(swf, id, w, h, ver, c) {
    this.swf = swf;
    this.id = id;
    this.width = w;
    this.height = h;
    this.version = ver || 6; // default to 6
    this.align = “middle”; // default to middle
    this.redirect = “”;
    this.sq = document.location.search.split(“?”)[1] || “”;
    this.altTxt = “Please upgrade your Flash Player.”;
    this.bypassTxt = “Already have Flash Player? Click here if you have Flash Player “+ this.version +” installed.”;
    this.params = new Object();
    this.variables = new Object();
    if (c) this.color = this.addParam(‘bgcolor’, c);
    this.addParam(‘quality’, ‘high’); // default to high
    this.doDetect = getQueryParamValue(‘detectflash’);
    }

    FlashObject.prototype.addParam = function(name, value) {
    this.params[name] = value;
    }

    FlashObject.prototype.getParams = function() {
    return this.params;
    }

    FlashObject.prototype.getParam = function(name) {
    return this.params[name];
    }

    FlashObject.prototype.addVariable = function(name, value) {
    this.variables[name] = value;
    }

    FlashObject.prototype.getVariable = function(name) {
    return this.variables[name];
    }

    FlashObject.prototype.getVariables = function() {
    return this.variables;
    }

    FlashObject.prototype.getParamTags = function() {
    var paramTags = “”;
    for (var param in this.getParams()) {
    paramTags += ”;
    }
    if (paramTags == “”) {
    paramTags = null;
    }
    return paramTags;
    }

    FlashObject.prototype.getHTML = function() {
    var flashHTML = “”;
    if (window.ActiveXObject && navigator.userAgent.indexOf(‘Mac’) == -1) { // PC IE
    flashHTML += ”;
    flashHTML += ”;
    if (this.getParamTags() != null) {
    flashHTML += this.getParamTags();
    }
    if (this.getVariablePairs() != null) {
    flashHTML += ”;
    }
    flashHTML += ”;
    }
    else { // Everyone else
    flashHTML += ”;
    }
    return flashHTML;
    }

    FlashObject.prototype.getVariablePairs = function() {
    var variablePairs = new Array();
    for (var name in this.getVariables()) {
    variablePairs.push(name + “=” + escape(this.getVariable(name)));
    }
    if (variablePairs.length > 0) {
    return variablePairs.join(“&”);
    }
    else {
    return null;
    }
    }

    FlashObject.prototype.write = function(elementId) {
    if(detectFlash(this.version) || this.doDetect==’false’) {
    if (elementId) {
    document.getElementById(elementId).innerHTML = this.getHTML();
    } else {
    document.write(this.getHTML());
    }
    } else {
    if (this.redirect != “”) {
    document.location.replace(this.redirect);
    } else {
    if (elementId) {
    document.getElementById(elementId).innerHTML = this.altTxt +””+ this.bypassTxt;
    } else {
    document.write(this.altTxt +””+ this.bypassTxt);
    }
    }
    }
    }

    function getFlashVersion() {
    var flashversion = 0;
    if (navigator.plugins && navigator.plugins.length) {
    var x = navigator.plugins[“Shockwave Flash”];
    if(x){
    if (x.description) {
    var y = x.description;
    flashversion = y.charAt(y.indexOf(‘.’)-1);
    }
    }
    } else {
    result = false;
    for(var i = 15; i >= 3 && result != true; i–){
    execScript(‘on error resume next: result = IsObject(CreateObject(“ShockwaveFlash.ShockwaveFlash.’+i+'”))’,’VBScript’);
    flashversion = i;
    }
    }
    return flashversion;
    }

    function detectFlash(ver) {
    if (getFlashVersion() >= ver) {
    return true;
    } else {
    return false;
    }
    }

    // get value of querystring param
    function getQueryParamValue(param) {
    var q = document.location.search;
    var detectIndex = q.indexOf(param);
    var endIndex = (q.indexOf(“&”, detectIndex) != -1) ? q.indexOf(“&”, detectIndex) : q.length;
    if(q.length > 1 && detectIndex != -1) {
    return q.substring(q.indexOf(“=”, detectIndex)+1, endIndex);
    } else {
    return “”;
    }
    }

    /* add Array.push if needed */
    if(Array.prototype.push == null){
    Array.prototype.push = function(item){
    this[this.length] = item;
    return this.length;
    }
    }

  2. 15 Settembre 2010 a 23:15 | #2

    credo la function getFlashVersion vada modificata come di seguito, pero’ non sapendo che errore dia, è solo un’ipotesi…
    ciao

    function getFlashVersion() {
    var flashversion = 0;
    if (navigator.plugins && navigator.plugins.length) {
    var x = navigator.plugins[“Shockwave Flash”];
    if(x){
    if (x.description) {
    var y = x.description;
    flashversion = parseInt( y.substr( y.indexOf(’.’)-2,2) );
    }
    }
    } else {
    result = false;
    for(var i = 15; i >= 3 && result != true; i–){
    execScript(’on error resume next: result = IsObject(CreateObject(”ShockwaveFlash.ShockwaveFlash.’+i+’”))’,’VBScript’);
    flashversion = i;
    }
    }
    return flashversion;
    }

  3. 24 Gennaio 2013 a 9:20 | #3

    Hey! Someone in my Myspace group shared this
    site with us so I came to take a look. I’m definitely enjoying the information. I’m bookmarking and will be tweeting this to my followers!
    Fantastic blog and excellent style and design.

  4. 10 Febbraio 2013 a 22:01 | #4

    @online
    Merci beaucoup. J’aimerais avoir beaucoup plus de temps pour mettre à jour mon blog…

  1. Nessun trackback ancora...
I commenti sono chiusi.