IE6 BUG: დინამიური iframe

ეს თემა გარკვეულწილად უკავშირდება ერთერთ წინა პოსტს დინამიური ფორმებისა და ფორმის ელემენტების შესახებ.

მსგავს პრობლემას ასევე ვაწყდებით iframe ელემენტთან მუშაობისას და შესაბამისად ისევ იგივე დილემის წინაშე ვდგებით… ანუ საჭიროა კოდის გაყოფა რომელიც ერთის მხრივ იმუშავებს IE – სთვის და მეორეს მხრივ სხვა ყველა დანარჩენი ბრაუზერისათვის.


პრობლემა

ისევე როგორც სხვა დანარჩენი ელემენტების შემთხვევაში ზოგჯერ საჭიროა iframe ელემენტის შექმნა დინამიურად. რა შემთხვევაა ეს? პირადად მე ყველაზე ხშირად ამას ვაკეთებ Ajax აპლოადის დროს… ანუ ყოველ დოკუმენტზე სადაც კი შეიძლება დამჭირდეს ფაილის აპლოადი არ არის აუცილებელი რომ წინასწარ შესაბამისი დამალული iframe ელემენტიც შევქმნა, ამას უნდა აკეთებდეს ფრეიმვორკი. ამის გაკეთება საკმაოდ მარტივია თუმცა IE – ში ყველაფერი ისე არ არის როგორც ეს უნდა იყოს.

როგორ გამოიყენება ასეთი iframe ელემენტი? გამომდინარე იქედან რომ როდესაც გვინდა ფაილის ატვირთვა სერვერზე ფორმის საბმიტი უნდა მოხდეს ჩვენთვის საჭირო iframe – ს მეშვეობით, ხოლო ამისათვის საჭიროა რომ form ელემენტის target ატრიბუტს მივანიჭოთ სასურველი iframe ელემენტის სახელი ანუ მისი name ატრიბუტის მნიშვნელობა. თუმცა…


მარტივი ტესტ კეისი:

1
2
3
4
5
6
7
8
9
var iframe = document.createElement('iframe');
iframe.name = 'test-iframe';
iframe.id = 'test-iframe-id';
iframe.style.width = '250px';
iframe.style.height = '250px';

document.body.appendChild(iframe);

alert(document.frames['test-iframe']); //შედეგი ამ შემთხვევაში არის "undefined"

შედეგი ისევე როგორც ფორმების შემთხვევაში არის “undefined“. ანუ ამ გზით შექმნილი iframe ელემენტი არ მოხვდა document ობიექტის frames მასივში, რაც ასეთ ელემენტს ჩვენთვის უსარგებლოს ხდის.


გამოსავალი

1
2
3
4
5
6
7
8
var iframe = document.createElement('<iframe name="test-iframe"></iframe>');
iframe.id = 'test-iframe-id';
iframe.style.width = '250px';
iframe.style.height = '250px';

document.body.appendChild(iframe);

alert(document.frames['test-iframe'].id); //გამობეჭდავს ელემენტის id ატრიბუტის მნიშვნელობას

მსგავსად დინამიური ფორმისა, ამ შემთხვევაშიც createElement მეთოდს გადავცემთ არა ელემენტის სახელს არამედ მის შესაქმნელად საჭირო HTML კოდს. ყურადღება მიაქციეთ name ატრიბუტს, იგი აუცილებლად უნდა მივუთითოთ.

ასეთ შემთხვევაში ყველაფერი რიგზეა და iframe ელემენტზე შესაბამისი წვდომაც გაგვაჩნია და რაც ყველაზე მნიშვნელოვანია ეს გამოსავალი სრულად აგვარებს პრობლემას.

ტეგები: ,

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"