2013-06-04 1 views
0

동일한 네트워크 내의 다른 서버에있는 다른 웹 사이트에있는 JS 기능을 호출하는 데 문제가 있습니다. 내 스크립트는 다음과 같이 작동합니다.크로스 도메인 자바 스크립트 함수 호출?

서버 1의 페이지 (IP : 192.168.1.17)에는 서버 2의 페이지 (IP : 162.168.1.18)에서 한 개의 팝업 창이 열리고, 항목 목록. 목록의 한 항목을 두 번 클릭하면 페이지가 opener.setearProducto 함수를 실행하고 매개 변수로 aString을 검색합니다. 하지만이 순간에 방화 광이 나에게 "오류 : 'setearProductos'속성에 대한 액세스가 거부되었으며 스크립트가 작동하지 않는다는 메시지가 표시됩니다. 동일한 PC에서 테스트 할 때 완벽하게 작동하기 때문에 이상합니다.

나는 인터넷 검색 및 CORS를 설치하는 필요를 발견했다. 그러나 두 서버에 설치하면 스크립트가 여전히 작동하지 않습니다. 또한 헤더를 Access-Control-Allow-Origin에 JSP 파일에 추가하려고했지만 작동하지 않았습니다.

문제가 응용 프로그램에 사용되는 프레임 워크 관련이 있는지 모르겠다는 : 2, 봄 스트럿츠.

무엇을해야할지 모르니 도움이 필요합니다. 도움이된다면

나는 나의 web.xml을를 연결합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <!-- CORS --> 
    <filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    </filter> 
    <!-- configuraicond e Struts y Spring --> 
    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    </filter> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>sistema.cron.TareasProgramadas</listener-class> 
    </listener> 
    <listener> 
     <listener-class>sistema.base.logica.ControlServicios</listener-class> 
    </listener> 

    <!-- inicio CORS --> 
    <filter-mapping> 
     <filter-name>CORS</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <!-- inicio Struts --> 
    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <session-config> 
     <session-timeout> 
      120 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
+0

내가 같은 PC에서 테스트 할 때 PC가 원격으로 다른 서버 리소스에 액세스 할 수 있습니다 또는 둘 다 웹 응용 프로그램이 동일한 서버에 배치되기 때문에 * 모든 작품이 완벽하게 * 아마, 따라서 모든 권한을 공유 할 수있는 자원 사용할 수 있습니다. –

답변

0

나는

<init-param> 
      <param-name>cors.allowOrigin</param-name> 
      <param-value>http://example.com</param-value> 
    </init-param> 

을 다음과 같이이 브라우저가 특정 보호 만든 것입니다 지정할 필요에 대한 here

이유를 찾을 설정 'INIT-PARAM'을 놓쳤다 생각 외부 사이트를 원격 호출 할 수는 없습니다.

은 내가 HTML5Rocks: Using CORS 사이트에 대해 읽어 보시기 바랍니다. 짧은 것은 외부 도메인에 대한 http POST 요청을 할 때 브라우저가 먼저 서버가 호출을할지 여부를 결정하는 데 사용할 특정 매개 변수와 함께 http OPTIONS 호출을 작성하여 브라우저가 POST 요청을 진행할 수 있는지 여부를 알기 위해 사용합니다. 그것의 모습에서

+0

thx, 시도해 보겠습니다. – Aegis

+0

참조한 페이지가 추가 구성 섹션에 있습니다. "CORS 필터는 대부분의 상황에서 추가 구성없이 실행할 수 있습니다. 기본 공용 CORS 모드가 요구 사항을 충족시키지 못하면 자신의 구성을 지정하여이를 무시할 수 있습니다. " 문제가 무엇인지 모르겠지만 init-param이 없다고 생각하지 않습니다. – jschabs

0

당신은 자바 스크립트의 same-origin-policy을 위반하고 있습니다. 요약하면 브라우저는 서버 1 (IP : 192.168.1.17)에서 페이지를 가져 오지만 나중에 서버 2 (IP : 192.168.1.18)에 상주하는 스크립트를 실행하려고합니다. 이것은 자바 스크립트 랜드에서 no-no입니다. 위키 백과 문서에서는이 제한을 완화 할 수있는 3 가지 방법에 대해 설명합니다. 당신은 아약스의 길을 가기로 결정 경우

는 네 번째 대안, 그리고 개인적으로 좋아는 JSONP의 방법이있다.

또한 당신이 말할 때 당신은 CORS과 관련하여 무슨 뜻인지 이해가 안 :

I install it in both servers

상시 관측소가 설치 일이 아니다. 이것은 동일한 출처 정책을 위반하려는 브라우저가 실제로 다른 웹 서버를 구성한 페이지 내에서 코드를 실행하려고하는 웹 서버 (HTTP 헤더 확장자 Origin을 통해)에게 알려주는 HTTP 확장입니다.시나리오에 넣어하려면 브라우저가 서버 1에서 페이지를 열고 다음 추가 코드 실행을 위해 서버 (2) 연락이

I brought the page originally from server 1. Is it allowed by you to execute your code in his page?

그리고 웹 서버이 개 필요 설치 (아무 것도 구성되지되는 웹 서버를 알려줍니다 AFAIK)는 신뢰하는 원 서버와 그렇지 않은 서버를 기준으로합니다.

동일한 PC에 모든 것이 들어있을 때 작동하는 이유는 초기 웹 페이지와 호출 할 opener.setearProducto의 추가 코드 모두에 대해 원본이 동일하다는 것입니다. 그들 사이

+0

나는 이제 이해합니다. 나는 Ajax 호출을 할 필요가 없기 때문에 "Cross-document messaging"을 시도 할 것이다. 하나의 스크립트에서 다른 스크립트로 텍스트를 전달하기 만하면된다. – Aegis

관련 문제