サーバレス練習帳

着眼大局着手小局

【python】WEBページにjavascript導入

◆参考
C#か何かのサイトを参考にしながら。
ameblo.jp

◆よし!pythonで書くぞ!

	def _addEventListenerToIETab(self,ieTab,pageId):
			# IHTMLのポインタ型を定義
			pDoc2 = POINTER(IHTMLDocument2)()
			pElement = POINTER(IHTMLElement)()
			pElement2 = POINTER(IHTMLElement2)() 
			# ウインドウハンドルからIHTMLDocument2ポインタ(pDoc2)を取得
			pDoc2 = self._getDoc2FromHandle(ieTab.handle)
			# Script型のDOMを生成して、IHTMLElementポインタ(pElement)に割り当てる
			pDoc2._IHTMLDocument2__com_createElement('SCRIPT',byref(pElement))
			# TBD
			pElement.setAttribute('language', 'JavaScript')
			pElement.setAttribute('type', 'text/JavaScript')
			pElement._IHTMLElement__com__set_innerText('alert();')
			# ページのbodyをIHTMLElement2ポインタ(pElement2)に割り当てる
			pDoc2.body._IUnknown__com_QueryInterface(byref(IHTMLElement2._iid_),byref(pElement2))
			# ページのbody(pElement2)の最終行直前の位置(beforeend)にScript型のDOM(pElement)を挿入する。
			pElement2.insertAdjacentElement('beforeend',pElement)
		return True

pythonMSHTMLやるときは、普段なら"_IHTMLElement2__com_insertAdjacentElement"を使いそうなものなのですが、これを使おうと思うとパラメーターが3つ必要らしく、「3つって、何?」か分からず、断念。普通に"insertAdjacentElement"を使ったら、パラメーター2つでSCROPTタグをインサートできました。

ちなみに、IEでf12を押してDOMを見ながらプログラムを動かすと、添付のキャプチャのようにリアルタイムでDOMが追加されていくのがわかって、面白いです。f:id:urbanplanner:20181124011932p:plain
画面の上がafterbeginで、下がbeforeendです。

参考にしたリンク先の説明の通り、frameset問題は気になるので、当面はbeforeendでやってみよう。
【追記】⇒ どうやらframesetがある場合は、framesetの中のbeforeendにIEが勝手に配置してくれる模様。凄い!そもそもframesetについて勉強したページも貼っておきます。
serverless.hateblo.jp



◆参考:マイクロソフト:insertAdjacentElement
insertAdjacentElement method (Windows) | Microsoft Docs