Zrobiłem mały plik XSLT, aby utworzyć wyjście HTML o nazwie Weather.xsl z kodem w następujący sposób:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

Chcę załadować na wyjściu HTML do div w pliku HTML, który próbuję zrobić za pomocą jQuery w następujący sposób:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

Ale otrzymuję następujący błąd: Pochodzenie Null nie jest dozwolone przez dostęp do Access-Control-Employ.

Przeczytałem o dodaniu nagłówka do XSLT, ale nie jestem pewien, jak to zrobić, więc każda pomoc byłaby doceniana, a jeśli ładowanie w HTML ma nie można zrobić w ten sposób, a następnie porady dotyczące jak inaczej Aby to było świetnie.

189
dudledok 10 grudzień 2011, 16:36

7 odpowiedzi

Najlepsza odpowiedź

Pochodzenie null to lokalny system plików, więc sugeruje, że ładowanie strony HTML, która wykonuje połączenie {X1}} za pomocą adresu URL {X2}} (np. Po prostu klikając go dwukrotnie w Lokalna przeglądarka plików lub podobna). Różne przeglądarki podejmują różne podejścia do zastosowania zasady tej samej części do plików lokalnych.

Domyślam się, że widzisz to za pomocą Chrome. Zasady Chrome do zastosowania SOP do lokalnych plików są bardzo szczelne, nie pomogło nawet ładowania plików z tego samego katalogu co dokument. Tak działa operę. Niektóre inne przeglądarki, takie jak Firefox, umożliwiają ograniczony dostęp do plików lokalnych. Ale zasadniczo, używając AJAX z lokalnymi zasobami nie zamierza pracować przez przeglądarkę.

Jeśli tylko testujesz coś lokalnie, że naprawdę będziesz wdrażać w sieci, zamiast używać plików lokalnych, zainstalować prosty serwer WWW i test przez http://} URLS. Daje to znacznie dokładniejszy obraz bezpieczeństwa.

231
T.J. Crowder 26 kwiecień 2015, 17:00

Chrome i Safari ma ograniczenie przy użyciu AJAX z lokalnymi zasobami. Dlatego rzuca błąd podobny

początek Null nie jest dozwolony przez dostęp do Access-Control-Employ-Origin.

Rozwiązanie: Użyj Firefox lub prześlij swoje dane do serwera tymczasowego. Jeśli nadal chcesz użyć Chrome, uruchom go z poniższą opcją;

--allow-file-access-from-files

Więcej informacji Jak dodać powyższy parametr do swojego chromu: Kliknij prawym przyciskiem myszy ikonę Chrome na pasku zadań, kliknij prawym przyciskiem myszy Google Chrome na oknie podręcznym i kliknij Właściwości i dodaj powyższy parametr wewnątrz Target Textbox pod zakładką Skrótu. Będzie lubię jak poniżej;

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Mam nadzieję, że to pomoże!

217
Gokhan Tank 7 listopad 2012, 03:20

Wystarczy dodać, że odpowiedź "Uruchom WebServer" wydaje się dość trudny, ale jeśli masz Pythona w systemie (zainstalowany domyślnie przynajmniej na MacOS i dowolnej dystrybucji Linux) jest tak proste jak:

python -m http.server  # with python3

Lub

python -m SimpleHTTPServer  # with python2

Więc jeśli masz plik HTML myfile.html w folderze, powiedzmy mydir, wszystko, co musisz zrobić, to:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

Następnie skieruj przeglądarkę do:

http://localhost:8000/myfile.html

I skończysz! Działa na Wszystkie przeglądarki , bez wyłączania zabezpieczeń internetowych, umożliwiając lokalne pliki, a nawet ponowne uruchomienie przeglądarki z opcjami wiersza poleceń.

51
gozzilli 20 maj 2017, 07:42

Chciałbym pokornie dodać, że zgodnie z tym źródłem: https://stackoverflow.com/a/14671362/17443693, ten rodzaj kłopotów jest teraz częściowo rozwiązany po prostu przy użyciu następujących instrukcji jQuery:

<script> 
    $.support.cors = true;
</script>

Wypróbowałem go na IE10.0.9200, a on działał natychmiast (przy użyciu jQuery-1.9.0.js).

Na Chrome 28.0.1500.95 - ta instrukcja nie działa (dzieje się to na wszystkich jako David skarży się w komentarzach na link powyżej)

Running Chrome z plikami - Dostęp do plików - nie działa dla mnie (jak roszczenia Maistora powyżej)

2
Community 23 maj 2017, 11:33

Dodanie bitów, aby użyć rozwiązania GOKHAN do używania:

--allow-file-access-from-files

Teraz wystarczy dołączyć powyższy tekst w tekście docelowym, a następnie przestrzeń. Upewnij się, że zamkniesz wszystkie przypadki przeglądarki Chrome po dodaniu nad właściwości. Teraz uruchom ponownie Chrome przy ikony, w której dodałeś tę nieruchomość. Powinien działać dla wszystkich.

2
saurabh 20 listopad 2013, 07:46

Szukałem rozwiązania, aby dokonać prośby XHR do serwera z lokalnego pliku HTML i znalazłem rozwiązanie za pomocą Chrome i PHP. (bez jQuery)

JavaScripts:

var x = new XMLHttpRequest(); 
if(x) x.onreadystatechange=function(){ 
    if (x.readyState === 4 && x.status===200){
        console.log(x.responseText); //Success
    }else{ 
        console.log(x); //Failed
    }
};
x.open(GET, 'http://example.com/', true);
x.withCredentials = true;
x.send();

Mój nagłówek żądania Chrome Origin: null

Mój nagłówek odpowiedzi PHP (zauważ, że "null" jest ciągiem ). HTTP_REFERER pozwala na pochodzenie od zdalnego serwera do drugiego.

header('Access-Control-Allow-Origin: '.(trim($_SERVER['HTTP_REFERER'],'/')?:'null'),true);
header('Access-Control-Allow-Credentials:true',true);

Udało mi się pomyślnie połączyć się z moim serwerem. Możesz pominąć nagłówki poświadczeń, ale to działa dla mnie z apache's {x0}}

Przetestowałem kompatybilność z FF i Operem, działa w wielu przypadkach, takich jak:

Z VM LAN IP (192.168.0.x) Powrót do IP WAN WAN WAN VM: Port
Z VM LAN IP Powrót do nazwy domeny zdalnej serwera.
Z lokalnego pliku .html do VM LAN IP i / lub VM WAN IP: Port,
Z lokalnego pliku .html do zdalnej nazwy domeny serwera.
I tak dalej.

0
Louis Loudog Trottier 29 styczeń 2020, 00:00

Możesz załadować lokalny plik JavaScript (na drzewie poniżej strony źródłowej file:/) za pomocą znacznika źródłowego:

<script src="my_data.js"></script>

Jeśli kodujesz wejście do JavaScript, jak w tym przypadku:

mydata.js :

$xsl_text = "<xsl:stylesheet version="1.0" + ....

(Jest to łatwiejsze dla JSON), masz "dane" w zmiennej globalnej JavaScript, aby użyć, jak chcesz.

0
Rich 3 marzec 2020, 02:22