안녕하세요.
한 화면에서 웹한글기안기를 여러개 띄워서 작업하는 화면이 있어서 질문 드립니다.
포럼 검색해보니 iframe을 이용해서 여러개를 띄우는 방법도 있던데
안녕하세요.!
await (자체적으로 한글 api을 활용해서 기안기를 띄우고, 내용을 넣어주는 함수, Promise로 감싸서 await 사용 가능)
await (위와 동일)
await (위와 동일)
await (위와 동일)
이렇게 한 페이지에 4개의 기안기를 띄우고 있습니다.
근데 하나의 기안기를 띄우고 SetTextFile까지 해서 평균 1.7초가 걸려 총 4초정도나 걸립니다.
다른 방법이 있는지, 문의드립니다.
원래 이렇게 시간이 걸리는게 맞나요? → 다른 방법이 있는지
자체적으로 Promise로 감싸준 함수를 그냥 await을 제거하고 쓰면 비동기로 작동되어서 잘 나올 거 같은데(독립적으로 띄어져도 되니깐), 현재는 그렇게 되지 않습니다. 4개의 기안기가 데이터가 섞이거나, 기안기가 초기화(화면에) 되지 않아서, 동기식으로 하나의 기안기를 띄우고 그 다음에 기안기를 띄우는 방식으로 사용하고 있습니다. 다른 방법이 있는지 질문드립니다.
이렇게 띄우게되면 저희가 의도한 기능이 제대로 작동하지 않아서 (비동기방식)
(hwpCtrl3 에 문서 불러오고, hwpCtrl2에 문서 불러오고…
마지막에 hwpCtrl에 2와 3의 문서를 이어붙이는 방식입니다.)
아래와 같은 방법으로 여러개를 띄우고 있었습니다.
// Initialize WEBHWP3
hwpCtrl3 = BuildWebHwpCtrl("hwpctrl3", "주소", function() {
window.parent.postMessage("initialized", '*');
hideLoader();
resize();
// Initialize WEBHWP2
hwpCtrl2 = BuildWebHwpCtrl("hwpctrl2", "주소", function() {
window.parent.postMessage("initialized", '*');
hideLoader();
// Initialize WEBHWP
hwpCtrl = BuildWebHwpCtrl("hwpctrl", "주소", function() {
window.parent.postMessage("initialized", '*');
hideLoader();
// 함수 안쪽에서 기능구현..
이 방법이 10.80.0.2706 버전까지는 제대로 작동했는데
최근에 받은 2.0 (13.82.0.128) 버전에서는 제대로 작동하지 않습니다.
(hwpCtrl2나 hwpCtrl에 문서를 불러와도
모든 기능이 hwpCtrl3에서만 작동하고 있습니다.)
혹시 웹한글기안기가 한 화면에서 무조건 하나만 열리도록 로직이 변경된건가요?
확인 부탁드립니다.
bart
12월 12, 2024, 3:42오전
2
안녕하세요.
웹한글 기안기를 여러개 띄우기 위해서는
각각 iframe으로 격리해야 합니다.
각 격리된 iframe 내부에서 BuildWebHwpCtrl 을 호출하고 callback 에서 외부로 메세지를 전달하여
메세지를 받은쪽에서
각 iframe 내부에 생성된 hwpctrl object 를 얻어와 동작하여야 합니다.
<script>
window.addEventListener("message", receiveMessage, false);
var HwpCtrlApp;
var HwpCtrlApp1;
var HwpCtrlApp2;
var HwpCtrlApp3;
function receiveMessage(event)
{
if (event.data == 'hwpctrl1') {
var HwpFrame = document.getElementById("Document_HwpCtrl1");
HwpCtrlApp1 = HwpFrame.contentWindow.HwpCtrl;
HwpCtrlApp = HwpCtrlApp1;
} else if (event.data == 'hwpctrl2') {
var HwpFrame = document.getElementById("Document_HwpCtrl2");
HwpCtrlApp2 = HwpFrame.contentWindow.HwpCtrl;
} else if (event.data == 'hwpctrl3') {
var HwpFrame = document.getElementById("Document_HwpCtrl3");
HwpCtrlApp3 = HwpFrame.contentWindow.HwpCtrl;
}
}
</script>
이전에도 같은 방식인데 뭔가 착오가 있으신듯 합니다.
포럼을 통한 안내는 한계가 있으니 자세한 내용은 기술지원 받아보시기 바랍니다.
감사합니다.
아. 저 링크한 게시글은 제가 작성한 글이 아닙니다.
검색하다가 나온 글이예요.
예전에도 한 번 질문글 올린 적 있었는데
기존에 HwpCtrl로 작업했던 소스를 웹한글기안기로 바꾸는 작업중
궁금한 점이 있어 문의드립니다.
먼저 기존 소스중 일부입니다.
아래와 같이 바이너리 형태로 저장된 한글내용을 여러개 불러와서
<c:if test=“${not empty hwp_list}”>
<c:forEach items=“${hwp_list}” var=“hwp_list”>
<c:if test=“${not empty hwp_list}”>
</c:if>
</c:forEach>
</c:if>
아래와 같이 순서대로 새 문서에 붙이는 형태로 작업했던 소스가 있었습니다.
$(‘input[name=hwp_list]’).each(function(i){
if(i != 0){
hwpCtrl.Run(‘BreakPage’);
}
hwpCtrl.SetTextFile($(this).val(), ‘HWP’, ‘insertfile’);
hwpCtrl.Run(‘MoveDocEnd’);
});
위 소스를 웹한글기…
기존 OCX와 달리, 웹한글기안기는 비동기방식이어서
for문 사용도 어려워서
위와 같은 방식으로 로직을 변경한 적이 있었는데요.
웹한글기안기를 iframe으로 여러개 띄우게되면
여러개가 모두 로딩이 끝나야
제가 의도한 기능을 순차적으로 실행할텐데,
로딩이 모두 끝났다는걸 알 수 있는 방법이 없지않나요?
(함수 내에서 hwpCtrl2, hwpCtrl3, hwpCtrl을 모두 사용합니다.
셋중에 하나라도 로딩이 안되있으면 중간에 오류가 발생해요.
그래서 본문의 방식으로 여러개를 띄운겁니다.)
bart
12월 12, 2024, 4:19오전
4
로딩이 완료되어야 메세지가 오고 HwpCtrl Object 를 설정할 수 있습니다.
모든 메세지가 도착한 후에 필요한 로직을 수행하면 될것 같습니다.
감사합니다.
위의 방법으로 테스트해보고 궁금한점 있으면 다시 질문 올려보겠습니다.
getQueryVariable는 웹한글기안기 내부함수가 아닌가요?
저 부분에서 오류가 발생하네요.
bart
12월 12, 2024, 6:10오전
7
웹기안기 적용에 관한 이슈라 포럼에서 다루기는 어려울것 같습니다.
자세한건 기술지원으로 문의 부탁드립니다.
혹시 웹한글기안기 여러개를 iframe으로 불러오는 형태의 샘플을 받아볼 수 있을까요?
iframe 형태로 웹한글기안기 여러개를 화면에 띄우는거까지는 성공했는데,
스크립트에서 hwpCtrl2.SetTextFile() 이런식으로 호출하려고 하는데 hwpCtrl2를 인식을 못하네요.