0

我使用AlphaImageLoader的修復稱爲supersleight用下面的代碼:爲PNG的作品AlphaImageLoader的修復在線,但沒有在本地

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"; 
    } 

我通過在HTML文件的開頭的腳本延遲標籤調用它。當我將腳本和頁面上傳到服務器時,它運行良好,但是當我在本地嘗試時,根本沒有顯示任何圖像。基本上,腳本使用AlphaImageLoader將背景設置爲前PNG圖像,然後將空像素設置爲IMG src。

如果我註釋掉:

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

的形象出現在正常狀態下,即與透明PNG刪除。不知何故,過濾器在本地完成時不會正確設置背景,並將其保留爲空。當在Browsershots和IE Netrenderer(ipinfo.info)上試用這個功能時,即使Browsershots,Microsoft Expression Web Superpreview 3,使用多個IE和IETester進行測試,它們都應該顯示它們的方式,但在Netrenderer中得到了同樣的結果...

任何人都有一個主意?


原來是因爲我通過文件訪問它://和所有它躺在一個文件夾中有很多的空間和奇怪的字符在其名稱...。不,我認爲會的問題,但顯然,爲了這個效果在我的情況下工作,我不能在一個文件夾不遵循一個簡單的語法沒有空格和東西...也許這是一個比專門的AlphaImageLoader更常見的資源管理器問題...任何人誰願意在這件事情上多點點啓發我是受歡迎的! :)


還有一個更新...我既可以通過網絡訪問,本地服務器(本地主機),並直接通過文件(文件://或C://)沒有問題。當發生以下情況出現該問題:

我有以下名稱的文件夾:

熱風1.2(上傳100908) PNGfix +bakgrundsfärger_IE5.5-6

當使用其他文件夾名稱問題從未發生過,所以我試圖縮小它的範圍...似乎是

符號是導致問題的原因之一.. AlphaImageLoader不會按照它應有的方式填充背景,但如果沒有它,背景填充就會正常......任何人都知道爲什麼?

+0

「本地」究竟是什麼意思:一個'file://'URL或'localhost'? – 2010-09-08 12:26:33

+0

您是否嘗試過單位PNG修復 - > http://labs.unitinteractive.com/unitpngfix.php – 2010-09-08 12:32:35

+0

@Pekka file:// ...嗯。有區別嗎? – 2010-09-08 12:44:39

回答

0

解決方案:我覺得很愚蠢,這與過濾器效果收到的參數有關。

的過濾器的使用是這樣的:

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

當然,當我去和英鎊源的follwing:

熱風V 1.2(上傳100908) PNGfix +bakgrundsfärger_IE5.5-6

...過濾器不會知道在哪裏關閉該參數並將其關閉得太早,因此圖像路徑不正確,甚至不包括尺寸測量方法。當然,這可能是程序員已經預見到的,但我不會責怪他.. cmon我在這裏使用什麼樣的文件夾名?當然。我不會在真實情況下使用它們。這只是爲了本地存儲網站,所以我可以跟蹤哪個版本。

已解決!謝謝大家!

0

AlphaImageLoader使用相對於文檔而不是CSS文件的路徑。也許這與你的問題有關?

+0

不,我通過Javascript obj.style.filter設置過濾器,而不是通過CSS,謝謝!:) – 2010-09-08 12:43:54

+0

AlphaImageLoader通過ActiveX應用,所以也許它是安全設置的問題,以允許使用本地文件。 – Bundyo 2010-09-08 13:23:32

+0

沒有安全問題..請參閱更新問題 – 2010-09-08 17:31:24

0

它不工作,因爲你正在使用的文件://而不是http://和瀏覽器的安全設置,不會讓你從文件中運行JavaScript://

如果您還沒有在PC上設置了服務器,我可以推薦XAMPP。

+0

不,文件//:正常工作 – 2010-09-08 17:27:10

+0

我隔離了問題...查看問題 – 2010-09-08 17:28:00

相關問題