묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
플래시 스크립트가 있는 페이지를 외부페이지로 연결할 때...
2007.12.18 14:16
드림위버 CS3으로 작업을 하면 플래시 무비를 넣을 때, 자바 스크립트를 함께 넣습니다.
IE6에서의 embed 태그 문제를 해결하는 거 같은데...
(전 스크립트나 프로그래밍에는 거의 문외한입니다.)
하여간 자동적으로 넣어주니까 예전처럼 자바 스크립트 화일을 따로 만들고 할 필요가 없어져서 좋았습니다.
근데, 이번에 제가 얼마 전에 만들어준 사이트의 호스팅 서비스를 바꾸면서
제로보드 4가 퍼미션 문제로 설치가 안되서 그냥 내친 김에 XE로 업그레이드를 했습니다.
이미 돌아가고 있는 사이트이고, 게시판 두개만 제로보드로 쓰고 있었기 때문에,
그거만 게시판 모듈을 이용해서 교체를 하기로 했고, 생각보다 쉽게 데이터도 이전을 했습니다.
근데 문제는 최근 게시물이더군요.
여기 게시판을 뒤진 결과, 외부 페이지를 이용하기로 했는데,
계속해서 플래시 무비 화일이 문제를 일으키는 것입니다.
백성찬님의 글을 가장 많이 참조하는 거 같아, 저도 그렇게 했는데,
그 분의 예제에 있는 플래시 화일은 그냥 오브젝트 태그안에 들어가 있고 따로 자바 스크립트는 없었습니다.
그렇다고 알아서 붙은 스크립트를 떼고 만들기는 싫어서 하루 종일 고민을 한 결과
해결을 하긴 했는데, 좀 찝찝해서 여기에 글을 올리게 되었습니다.
일단,
스크립트가 들어간 페이지를 외부페이지로 했더니,
unterminated string constant 라는 페이지 에러가 계속 뜨더군요.
이거에 대해 검색을 했더니 모르는 소리들만 나오는 와중에,
따옴표에 관한 얘기가 있었습니다.
그래서 살펴봤더니, 진짜 외부페이지로 변환된 페이지의 소스에는
스크립트 끝에 따옴표가 생겨있었습니다.
게시판에 상단화일에도 같은 html 코드를 넣었는데, 그건 괜찮고, 외부페이지만 이런 식이었습니다.
그래서 고민을 좀 하다가, opage_controller.php를 열어보았습니다.
그랬더니, 거기 맨 아래부분에 따옴표를 붙여주는 부분이 있더군요.
일단 왜 붙여주는 건지 모른채로 그냥 그 부분과 그 밑에 실제로 따옴표를 붙여주는... 부분까지 지웠습니다.
그랬더니, 하루를 좀 넘게 뜨질 않아 사람을 잡던 플래시 화일들이 바로 떠주더군요.
(제가 지운 부분입니다.)
// element의 속성중 value에 " 로 안 묶여 있는 것을 검사하여 묶어줌
$content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, '_fixQuotation'), $content);
-----------------------------------------------------------------------------------------------------------
/**
* @brief 태그의 속성에 " 를 추가
**/
function _fixQuotation($matches) {
$key = $matches[1];
$val = $matches[2];
if(substr($val,0,1)!='"') $val = '"'.$val.'"';
return sprintf('%s=%s', $key, $val);
}
여기까지는 피씨에서 IE6로 작업을 하던 중이었고, 별 문제없이 돌아가기 시작했습니다.
그리고 맥으로 와서 파폭을 열어서 보았더니...
맨 위에 플래시 파일들이 따로 중복이 되어 떠있는 것이었습니다.
피씨에서 작업을 할 때, 소스를 보면, 스크립트 내용들이 맨위에 반복이 되어있는 걸 보긴 봤는데,
별 문제 없이 돌아가길래 지나쳤던 게 기억이 나서, 다시 opage_controller.php를 열었습니다.
위쪽에 보니까, 스크립트등의 내용을 추출해준 다음에 불러오는 페이지의 내용을 읽을 때,
그걸 제거하는 거 같았습니다.
그래서 또 그 두 부분을 다 지웠더니, 정상으로 돌아오더군요.
(지운 부분입니다.)
// <link, <style, <script 등의 정보를 추출
preg_match_all('!<link([^>]*)>!is', $content, $link_buff);
for($i=0;$i<count($link_buff[0]);$i++) {
$tmp_str = trim($link_buff[0][$i]);
if(!$tmp_str) continue;
$header_script .= $tmp_str."\n";
}
preg_match_all('!<(style|script)(.*?)<\/(style|script)>!is', $content, $script_buff);
for($i=0;$i<count($script_buff[0]);$i++) {
$tmp_str = trim($script_buff[0][$i]);
if(!$tmp_str) continue;
$header_script .= $tmp_str."\n";
}
----------------------------------------------------------
// link, style, script등 제거
$body_script = preg_replace('!<link([^>]*)>!is', '', $body_script);
$body_script = preg_replace('!<(style|script)(.*?)<\/(style|script)>!is', '', $body_script);
뭐, 정상으로 돌아가니까 문제는 없는데,
이 부분이 왜 필요한 지, 혹시 지워도 문제는 없는지,
고수님들의 지도편달 부탁드립니다.
참고로 사이트 주소는 http://www.studiohong.com 입니다.
그럼...
IE6에서의 embed 태그 문제를 해결하는 거 같은데...
(전 스크립트나 프로그래밍에는 거의 문외한입니다.)
하여간 자동적으로 넣어주니까 예전처럼 자바 스크립트 화일을 따로 만들고 할 필요가 없어져서 좋았습니다.
근데, 이번에 제가 얼마 전에 만들어준 사이트의 호스팅 서비스를 바꾸면서
제로보드 4가 퍼미션 문제로 설치가 안되서 그냥 내친 김에 XE로 업그레이드를 했습니다.
이미 돌아가고 있는 사이트이고, 게시판 두개만 제로보드로 쓰고 있었기 때문에,
그거만 게시판 모듈을 이용해서 교체를 하기로 했고, 생각보다 쉽게 데이터도 이전을 했습니다.
근데 문제는 최근 게시물이더군요.
여기 게시판을 뒤진 결과, 외부 페이지를 이용하기로 했는데,
계속해서 플래시 무비 화일이 문제를 일으키는 것입니다.
백성찬님의 글을 가장 많이 참조하는 거 같아, 저도 그렇게 했는데,
그 분의 예제에 있는 플래시 화일은 그냥 오브젝트 태그안에 들어가 있고 따로 자바 스크립트는 없었습니다.
그렇다고 알아서 붙은 스크립트를 떼고 만들기는 싫어서 하루 종일 고민을 한 결과
해결을 하긴 했는데, 좀 찝찝해서 여기에 글을 올리게 되었습니다.
일단,
스크립트가 들어간 페이지를 외부페이지로 했더니,
unterminated string constant 라는 페이지 에러가 계속 뜨더군요.
이거에 대해 검색을 했더니 모르는 소리들만 나오는 와중에,
따옴표에 관한 얘기가 있었습니다.
그래서 살펴봤더니, 진짜 외부페이지로 변환된 페이지의 소스에는
스크립트 끝에 따옴표가 생겨있었습니다.
게시판에 상단화일에도 같은 html 코드를 넣었는데, 그건 괜찮고, 외부페이지만 이런 식이었습니다.
그래서 고민을 좀 하다가, opage_controller.php를 열어보았습니다.
그랬더니, 거기 맨 아래부분에 따옴표를 붙여주는 부분이 있더군요.
일단 왜 붙여주는 건지 모른채로 그냥 그 부분과 그 밑에 실제로 따옴표를 붙여주는... 부분까지 지웠습니다.
그랬더니, 하루를 좀 넘게 뜨질 않아 사람을 잡던 플래시 화일들이 바로 떠주더군요.
(제가 지운 부분입니다.)
// element의 속성중 value에 " 로 안 묶여 있는 것을 검사하여 묶어줌
$content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, '_fixQuotation'), $content);
-----------------------------------------------------------------------------------------------------------
/**
* @brief 태그의 속성에 " 를 추가
**/
function _fixQuotation($matches) {
$key = $matches[1];
$val = $matches[2];
if(substr($val,0,1)!='"') $val = '"'.$val.'"';
return sprintf('%s=%s', $key, $val);
}
여기까지는 피씨에서 IE6로 작업을 하던 중이었고, 별 문제없이 돌아가기 시작했습니다.
그리고 맥으로 와서 파폭을 열어서 보았더니...
맨 위에 플래시 파일들이 따로 중복이 되어 떠있는 것이었습니다.
피씨에서 작업을 할 때, 소스를 보면, 스크립트 내용들이 맨위에 반복이 되어있는 걸 보긴 봤는데,
별 문제 없이 돌아가길래 지나쳤던 게 기억이 나서, 다시 opage_controller.php를 열었습니다.
위쪽에 보니까, 스크립트등의 내용을 추출해준 다음에 불러오는 페이지의 내용을 읽을 때,
그걸 제거하는 거 같았습니다.
그래서 또 그 두 부분을 다 지웠더니, 정상으로 돌아오더군요.
(지운 부분입니다.)
// <link, <style, <script 등의 정보를 추출
preg_match_all('!<link([^>]*)>!is', $content, $link_buff);
for($i=0;$i<count($link_buff[0]);$i++) {
$tmp_str = trim($link_buff[0][$i]);
if(!$tmp_str) continue;
$header_script .= $tmp_str."\n";
}
preg_match_all('!<(style|script)(.*?)<\/(style|script)>!is', $content, $script_buff);
for($i=0;$i<count($script_buff[0]);$i++) {
$tmp_str = trim($script_buff[0][$i]);
if(!$tmp_str) continue;
$header_script .= $tmp_str."\n";
}
----------------------------------------------------------
// link, style, script등 제거
$body_script = preg_replace('!<link([^>]*)>!is', '', $body_script);
$body_script = preg_replace('!<(style|script)(.*?)<\/(style|script)>!is', '', $body_script);
뭐, 정상으로 돌아가니까 문제는 없는데,
이 부분이 왜 필요한 지, 혹시 지워도 문제는 없는지,
고수님들의 지도편달 부탁드립니다.
참고로 사이트 주소는 http://www.studiohong.com 입니다.
그럼...
댓글 4
-
백성찬
2007.12.18 15:11
-
진이486
2008.03.10 19:58
저도 외부쪽에 연결된느 자바스크립이나 이런것이 실행이않되어서 이거데로 했는데 되는군여... 문제가없이보여도...
보안상이나.... 그런 오류가없을지 ..... 심히걱정이... -
alicialee
2008.11.11 16:38
1.0.6으로 업데이트 하고나서 또 외부페이지 레이아웃 깨져서 고생했는데
또 한 번 이글의 도움을 받네요. ^^
감사합니다~ -
志卓注册离岸公司
2008.11.19 16:40
ie6,7 파이어폭스 모두 정상으로 나옵니다.
사진과 음악, 최근문서 연결도 정상입니다.
사용하는데 에러가 없으면 괜찮을 것 같습니다.