Zmodyfikowałem istniejącą aplikację AngularJS, która wyświetla listę klientów, dodając przycisk, który pozwala pobrać informacje o klientach jako vcard. Tworzę vcard w JavaScript bezpośrednio po kliknięciu. Pobieranie przycisku wywołuje następującą funkcję na kliknięcie z klientem-element jako argumentu:Odmowa zgody na kliknięcie linku w przeglądarce Internet Explorer 11
function transcodeToAnsi(content){
var encoding = "windows-1252";
var nonstandard = {NONSTANDARD_allowLegacyEncoding: true};
return new TextEncoder(encoding, nonstandard).encode(content);
}
$scope.download = function(item) {
var filename = 'contact.vcf';
var aId = "vcard";
var content = createVCard(item);
var encoded = transcodeToAnsi(content);
var blob = new Blob([ encoded ], { type : 'vcf' });
var url = (window.URL || window.webkitURL).createObjectURL(blob);
$("body").append('<a id="' + aId + '" href="' + url + '" download=' + filename + ' class="hidden"></a>');
$timeout(function(){
document.getElementById(aId).click();
$("#" + aId).remove();
})
return false;
}
W createVCard funkcją po prostu utworzyć zawartość pliku jako ciąg, więc nie powinno wejść w problemie. Transkodowanie jest wykonywane przez tę bibliotekę: https://github.com/inexorabletash/text-encoding
Funkcja działa bez problemu w Firefoksie i Chrome, ale nie w IE11. Następujący błąd podano w konsoli:
Error: Permission denied
at Anonymous function (http://***/Contacts2015/js/contacts.js:169:9)
at Anonymous function (http://***/static/9bojdXAkdR8XdVMdSTxZAgzEwGWhHMwgpuONdU2Y8F4.js:14305:11)
at completeOutstandingRequest (http://***/static/9bojdXAkdR8XdVMdSTxZAgzEwGWhHMwgpuONdU2Y8F4.js:4397:7)
at Anonymous function (http://***/static/9bojdXAkdR8XdVMdSTxZAgzEwGWhHMwgpuONdU2Y8F4.js:4705:7) undefined
Linia 169 jest to instrukcja funkcji powyżej: jest wyświetlany
document.getElementById(aId).click();
Ten sam błąd, gdy to stwierdzenie jest wejście w konsoli ręcznie.
Chciałbym docenić każdą podpowiedź na temat przyczyny, a nawet więcej dobrego rozwiązania.
EDIT
Poprawiono błąd linii i literówka.
To może być problem, ponieważ dołączone do 'aId' link do DOM - mogłoby się okazać, że nie jest pewien, jak go usunąć ponownie. Proponuję rzucić okiem na usuwanie elementów dołączonych do DOM, być może to mogłoby pomóc. – Forest
@Furze Przepraszamy, mój błąd. Wydrukowałem niewłaściwą linię ... Zmieniłem ją. –
Spróbuj zmienić 'document.getElementById (aId) .click();' na '$ (" # "+ aId) .trigger (" kliknij ");'. – Forest