0

я использую AlphaImageLoader исправить под названием supersleight со следующим кодом:AlphaImageLoader фикс для работы PNG в Интернете, но не локально

var supersleight = function() { 

var root = false; 
var applyPositioning = true; 

// Path to a transparent GIF image 
var shim = 'images/empty.gif'; 

// RegExp to match above GIF image name 
//var shim_pattern = /x\.gif$/i; 



var fnLoadPngs = function() { 
    if (root) { 
    root = document.getElementById(root); 
    }else{ 
    root = document; 
    } 
    for (var i = root.all.length - 1, obj = null; (obj = root.all[i]); i--) { 
    // background pngs 
    if (obj.currentStyle.backgroundImage.match(/\_.png/i) !== null) { 
    bg_fnFixPng(obj); 
    } 
    // image elements 
    if (obj.tagName=='IMG' && obj.src.match(/\_.png$/i) !== null){ 
    el_fnFixPng(obj); 
    } 
    // apply position to 'active' elements 
    if (applyPositioning && (obj.tagName=='A' || obj.tagName=='INPUT') && obj.style.position === ''){ 
    obj.style.position = 'relative'; 
    } 
    } 
}; 

var bg_fnFixPng = function(obj) { 
    var mode = 'scale'; 
    var bg = obj.currentStyle.backgroundImage; 
    var src = bg.substring(5,bg.length-2); 
    if (obj.currentStyle.backgroundRepeat == 'no-repeat') { 
    mode = 'crop'; 
    } 
    obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')"; 
    obj.style.backgroundImage = 'url('+shim+')'; 
    obj.style.visibility= 'visible'; 
}; 

var el_fnFixPng = function(img) { 
    var src = img.src; 
    img.style.width = img.width + "px"; 
    img.style.height = img.height + "px"; 
    img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')"; 
    img.src = shim; 
    img.style.visibility= 'visible'; 
}; 

var addLoadEvent = function(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
    if (oldonload) { 
    oldonload(); 
    } 
    func(); 
    }; 
    } 
}; 

return { 
    init: function() { 
    addLoadEvent(fnLoadPngs); 
    }, 

    limitTo: function(el) { 
    root = el; 
    }, 

    run: function() { 
    fnLoadPngs(); 
    } 
    }; 
    }(); 

    // limit to part of the page ... pass an ID to limitTo: 
    // supersleight.limitTo('header'); 
    supersleight.init(); 
    //Från början är opacity'n 100 eftersom jag inte vet om Javascript är påsatt eller inte och därmed inte vet om PNG'arna kommer att 
    //bli genomskinliga eller ej. Är Javascript på så gör jag också bakgrunden genomskinlig så att PNG'arnas genomskinlighet inte blir i onödan 
    //If-satsen eftersom transparency ej existerar på första-sidan och därigenom ger fel där 

    if(document.getElementById('transparency') != null){ 
    document.getElementById('transparency').style.filter= "alpha(opacity=60)"; 
    document.getElementById('transparency').style.background = "#cccccc"; 
    } 

Я называю это через SCRIPT Defer тег в начале HTML-файла. Когда я загружаю скрипт и страницу на сервер, он отлично работает, но когда я пытаюсь его локально, изображение вообще не отображается. В принципе, сценарий устанавливает фон как прежнее изображение PNG с помощью AlphaImageLoader, а затем устанавливает пустой пиксель как IMG src.

Если я закомментировать:

//img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')"; 
//img.src = shim; 

изображение появляется в нормальном состоянии, то есть как PNG с прозрачностью удалены. Так или иначе, фильтр не устанавливает фон правильно, когда он выполняется локально и оставляет его пустым. Когда вы пытаетесь это сделать в браузерах и IE Netrenderer (ipinfo.info), я получаю тот же результат в Netrenderer, хотя браузеры, Microsoft Expression Web Superpreview 3, тестирование с несколькими членами и IETester показывает, как они должны ...

Любой, кто получил идея?


Оказывается, это потому, что я к нему доступ через файл: // и все это лежит в папке с большим количеством пробелов и странные символы в названии .. .not, что я думал, что это важно, но по-видимому, для того, чтобы этот эффект работал в моем случае, я не могу иметь его в папке, которая не следует простому синтаксису без пробелов и всего ... может быть, это скорее общая проблема Explorer, чем специально AlphaImageLoader ... любой кто хочет просветить меня немного больше в этом вопросе, добро пожаловать! :) более


Одно обновление ... Я могу получить доступ к нему как через Интернет, локальный сервер (локальный) и непосредственно через файл (файл: // или C: //) без проблем. Проблема возникает, когда происходит следующее:

У меня была папка с именем:.

Sirocco v 1.2 (закачанный 100908) PNGfix + bakgrundsfärger_IE5.5-6

Когда с использованием других имен папок проблема никогда не происходили, поэтому я пытался сузить ... кажется, что

)

символ тот, который вызывает проблему .. с ним, AlphaImageLoader не заполняет фон так, как предполагается, но без него, фон заполняется хорошо ... кто-нибудь понял, почему?

+0

Что означает «локально»: «файл: //' URL или «localhost»? –

+0

Вы пробовали установку PNG Fix -> http://labs.unitinteractive.com/unitpngfix.php –

+0

@Pekka файл: // ... hmm. есть ли разница? –

ответ

0

РЕШЕНИЕ: Я чувствую себя глупо, это связано с параметрами, полученными фильтрующим эффектом.

Использование фильтра выглядит следующим образом:

filter:progid:DXImageTransform.Microsoft.AlphaImageLoader('source','sizingMethod') 

Конечно, когда я иду дальше и фунт follwing для источника:.

Sirocco v 1.2 (закачанный 100908) PNGfix + bakgrundsfärger_IE5.5-6

... фильтр не будет знать, где закрыть парантез и закрыть его слишком рано, поэтому неправильный путь изображения и метод калибровки даже не включены. Конечно, это могло быть предвидено программистом, но я не виню его .. cmon, какие имена папок я использую здесь ??? Конечно. Я бы не использовал их в реальной ситуации .. это просто для локального хранения веб-сайта, чтобы я мог отслеживать, какую версию.

SOLVED! Спасибо вам всем!

0

AlphaImageLoader использует пути относительно документа, а не файл CSS. Может быть, это имеет какое-то отношение к вашей проблеме?

+0

Нет, я установил фильтр через Javascript obj.style.filter, а не через CSS, спасибо в любом случае! :) –

+0

AlphaImageLoader применяется через ActiveX, поэтому, возможно, это вопрос настроек безопасности, позволяющих использовать локальные файлы. – Bundyo

+0

Нет проблемы с безопасностью .. см. Вопрос для обновления –

0

Это не работает, потому что вы используете файл: //, а не HTTP: // и настройки безопасности браузера не позволит запустить JavaScript из файла: //

Если вы еще не есть сервер, настроенный на вашем ПК, я могу порекомендовать XAMPP.

+0

Нет, файл //: отлично работает –

+0

Я изолировал проблему ... см. Вопрос –

Смежные вопросы