안녕하세요..<br><br>이곳 저곳 다 뒤져봤는데 도저히 답을 못 찾겠어서 질문드립니다.<br><br>WebView를 가진 Qt Application에서 WebPage 로딩시에 Javascript를 연동해야 하는 작업을 하고 있는데요.<br><br>예를들면 Application안에 WebView, button1, button2가 있는 상태에서 자바스크립트로(그냥 한글로 쓰겠슴 ㅠ..ㅠ) 짜여진 페이지를 로딩할 시에<br>해당 자바 스크립트가 부르는 펑션 콜을 캐치해서 버튼을 보여주고, 안보여주고 하는 구조 입니다.<br><br>(자바 스크립트가 show()라는 펑션을 부르면 어플리케이션에서 버튼을 보여주고 뭐 그런 구조..)<br><br><pre style="font-family:'돋움체';font-size:15px;background:rgb(30,30,30) none repeat scroll 0% 0%;"><span style="color:#c8c8c8;">connect</span><span style="color:#b4b4b4;">(</span><span style="color:#dadada;">ui</span><span style="color:#b4b4b4;">.</span><span style="color:#dadada;">WebView</span><span style="color:#b4b4b4;">-></span><span style="color:#c8c8c8;">page</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">mainFrame</span><span style="color:#b4b4b4;">(),</span> <span style="color:#569cd6;">SIGNAL</span><span style="color:#b4b4b4;">(</span>javaScriptWindowObjectCleared<span style="color:#b4b4b4;">()),</span> <span style="color:#569cd6;">this</span><span style="color:#b4b4b4;">,</span> <span style="color:#569cd6;">SLOT</span><span style="color:#b4b4b4;">(</span><span style="color:#c8c8c8;">attachWindowObject</span><span style="color:#b4b4b4;">()));</span><span style="color:#c8c8c8;">connect</span><span style="color:#b4b4b4;">(</span><span style="color:#dadada;">ui</span><span style="color:#b4b4b4;">.</span><span style="color:#dadada;">WebView</span><span style="color:#b4b4b4;">-></span><span style="color:#c8c8c8;">page</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">mainFrame</span><span style="color:#b4b4b4;">(),</span> <span style="color:#569cd6;">SIGNAL</span><span style="color:#b4b4b4;">(</span>loadFinished<span style="color:#b4b4b4;">(</span><span style="color:#569cd6;">bool</span><span style="color:#b4b4b4;">)),</span> <span style="color:#569cd6;">this</span><span style="color:#b4b4b4;">,</span> <span style="color:#569cd6;">SLOT</span><span style="color:#b4b4b4;">(</span><span style="color:#b4b4b4;"></span><span style="color:#c8c8c8;">attachWindowObject</span><span style="color:#b4b4b4;"></span><span style="color:#b4b4b4;">()));</span></pre><br><pre style="font-family:'돋움체';font-size:15px;background:rgb(30,30,30) none repeat scroll 0% 0%;"><span style="color:#569cd6;">void</span> <span style="color:#4ec9b0;">mainWindow</span><span style="color:#b4b4b4;">::</span><span style="color:#c8c8c8;">attachWindowObject</span><span style="color:#b4b4b4;">(){</span> <span style="color:#bd63c5;">qDebug</span><span style="color:#b4b4b4;">()</span> <span style="color:#b4b4b4;"><<</span> <span style="color:#d69d85;">"============= attachWindowObject"</span><span style="color:#b4b4b4;">;</span> <span style="color:#dadada;">ui</span><span style="color:#b4b4b4;">.</span><span style="color:#dadada;">WebView</span><span style="color:#b4b4b4;">-></span><span style="color:#c8c8c8;">page</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">mainFrame</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">addToJavaScriptWindowObject</span><span style="color:#b4b4b4;">(</span><span style="color:#4ec9b0;">QString</span><span style="color:#b4b4b4;">(</span><span style="color:#d69d85;">"love"</span><span style="color:#b4b4b4;">),</span> <span style="color:#dadada;">fxck</span><span style="color:#b4b4b4;">);<br>}<br></span></pre><br>현재 이 두개의 시그널로 전부 테스트를 해보았는데 각 각 문제가 있는데요...<br><br><pre style="font-family:'돋움체';font-size:15px;background:rgb(30,30,30) none repeat scroll 0% 0%;">javaScriptWindowObjectCleared<span style="color:#b4b4b4;">()</span></pre>이 시그널을 사용할 경우, <br>자바 스크립트 내에서 미리 선언된 var은 캐치를 못합니다..<br><br>예를 들어 아래와 같은 자바 스크립트가 있다면..<br><br>var love = {<br> show: function () {<br> alert('asdf');<br> }<br>};<br><br>var love = new love();<br>.<br>.<br>.<br><br><button onClick="love.show()">뒤져임마!/button> <br><button onClick="_love.show()">뒤...!/button> <br><br>love라는 object를 qt에서 가져오지 못합니다..<br>대신 _love라는 놈은 버튼 클릭 시 object가 생성되기 때문에 잡을 수 있는 듯 해요,.<br><br>이곳 저곳 찾아본 결과 예상되는 것은 javaScriptWindowObjectCleard( )가 호출되는 시점에 페이지 내에서 자바스크립트의 객체에 대한 생성이 완료가 되기 전이라 못 받아 오는 듯해요..<br><br><br><br><pre style="font-family:'돋움체';font-size:15px;background:rgb(30,30,30) none repeat scroll 0% 0%;"><span style="color:#b4b4b4;"></span>loadFinished<span style="color:#b4b4b4;">(</span><span style="color:#569cd6;">bool</span><span style="color:#b4b4b4;">)</span><br></pre>그래서 두번째로 이 방법을 사용해 보았는데 요 놈은 호출되는 시점이 자바스크립트 객체의 생성이 다 끝나고, 페이지의 로딩까지 전부 완료된 후에 콜이 되기 때문에 love라는 객체를 가져오는데는 성공하죠.<br><br>하지만 또 큰 문제가,, loadFinished( )가 콜되기전에 불러지는 자바스크립트 펑션은 캐치할 수 가 됩니다..<br>웹뷰가 다 로딩되기 전에 미리 자바스크립트의 펑션을 분석해서 레이아웃을 그려줘야 되는데 그것이 불가능 하죠..<br><br><br>결국 두 가지 다 타이밍 문제였는데 qt에서 제공하는 api를 다 써보아도 <br>자바 스크립트 객체 로딩이 완료 되는 시간 ~ 페이지가 로딩이 완료되는 시간.. 요 사이의 타이밍을 잡을 수가 없더군요.<br><br><br>궁여지책으로 ( 아래는 어플리케이션에서 자바스크립트 단으로 명령을 내리는 api 입니다 )<br><pre style="font-family:'돋움체';font-size:15px;background:rgb(30,30,30) none repeat scroll 0% 0%;"><span style="color:#dadada;">ui</span><span style="color:#b4b4b4;">.</span><span style="color:#dadada;">WebView</span><span style="color:#b4b4b4;">-></span><span style="color:#c8c8c8;">page</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">mainFrame</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">evaluateJavaScript</span><span style="color:#b4b4b4;">(</span><span style="color:#d69d85;">"var _love = love"</span><span style="color:#b4b4b4;">);</span><span style="color:#dadada;">ui</span><span style="color:#b4b4b4;">.</span><span style="color:#dadada;">WebView</span><span style="color:#b4b4b4;">-></span><span style="color:#c8c8c8;">page</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">mainFrame</span><span style="color:#b4b4b4;">()-></span><span style="color:#c8c8c8;">evaluateJavaScript</span><span style="color:#b4b4b4;">(</span><span style="color:#d69d85;">"_love.show()"</span><span style="color:#b4b4b4;">);</span></pre>뭐 이런 식으로 임시로 스크립트 위에 변수 생성후에 love.show( )를 잡아 보려는 식도 해보고 별 짓을 다 해봤는데<br>자바 스크립트에 대한 지식이 아직 부족해서 엄청 헤매고 있는 상황입니다.<br><br>혹시 좋은 꼼수나,, 비슷한 문제로 고민 해 보신 분 있으시면 조언 좀 부탁드립니다..( ㅠㅠ 꼼수라도 필요함..)<br><br>ㅠㅠ 며칠째 슬퍼요<br><br><br>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.