Comments (8)
問題点:メソッドとプロパティをちゃんと分けておかないとダメっぽい。
Tridentではメソッドでもプロパティでも動くぜ、みたいな実装でもOKだったけど、そのあたりが厳しくて固まる。
メソッドとプロパティで2重に使用している項目を分ける必要がある。
現在 | 変更後 |
---|---|
CurrentViewMode( | SetViewMode( |
FilterView( | Search( |
SortColumn( | GetSortColumn( |
from tablacusexplorerwebview2.
問題点:ActiveScriptで作ったObjectにObjectを入れると空の文字列になってしまう。
対策:ObjectとArrayをActiveScriptに頼らずに実装する。新規項目を追加しようとすると固まる問題にも対応
delete の代替としては オブジェクトに undefined を入れたら消すことにする
※JavaScriptのオブジェクトだとページをリロードした際に全部解放されてしまうので、別に実装する必要があります。(Trident版の場合)
from tablacusexplorerwebview2.
問題点:IDispatch(オブジェクト)で length が使用できない。
読み取りすると必ず 0 が帰る
対策:length の代わりにCountを使う
大文字小文字で別判定になり、Length は通る
WSHのオブジェクトでlengthを調べる必要がある場合は大文字小文字判別しなさそうなのでLengthを使ってみることにする。
.getHostProperty("length") を使うことも可能
2020-9-19追記
api.GetObjI(o, "length") を使うのが無難
from tablacusexplorerwebview2.
問題点:DISP_E_UNKNOWNNAMEなどエラーを返すと戻り値が自分自身になる
IDispatch->GetIDsOfNames
でエラーを返すと
dispIdMember が DISPID_VALUE
wFlags が DISPATCH_PROPERTYGET
のIDispatch->Invoke が呼び出され 戻り値が自分自身になってしまう。
ObjectとArrayなど有無判別を使いたい物はGetIDsOfNamesで名前がない場合は戻り値、S_OK
rgDispIdにDISPID_UNKNOWN を返し、Invokeでも処理する
from tablacusexplorerwebview2.
要確認:オブジェクトのtypeof はfunctionになる。
Tridentはobjectになるので両方通るようにする
from tablacusexplorerwebview2.
メモ:IDispatchのGetIDsOfNamesで取得するDISPIDは名前ごとに固定した値である必要がある
連想配列でunordered_mapの要素インデックスを参考にDISPIDにしていたが、要素を増やすと他のDISPIDも変わるので不具合が発生した。
※GetIDsOfNamesからInvokeまでの間にDISPIDをキャッシュして使う場合があるので名前が同じ場合は同じDISPIDを返さないとダメ
名前からDISPIDを引き出すunordered_mapとDISPIDから値(VARIANT)を引き出すmapの2本立てで対応。
DISPIDから値(VARIANT)を引き出す方をunordered_mapでなくmapにしたのは、for inなどの際に入力した順序にしたかったから。(一般のJavaScriptはこの順のような気がするので)
from tablacusexplorerwebview2.
注意:HTMLのエレメントは自作の連想配列などIDispatchには入れられない。
取り出すと別物になるのでBlinkの連想配列や配列に入れる
from tablacusexplorerwebview2.
注意:VT_EMPTYを返すとnullになり、Blink側からnullを渡すとVT_EMPTYになる。(VT_NULLにならない)
from tablacusexplorerwebview2.
Related Issues (12)
- Tablacus Explorer blink化計画 HOT 4
- 配列関連の問題点など HOT 3
- スクリプト実行関連の問題点 HOT 5
- 進捗状況 HOT 14
- 文字列関連の問題点など
- Blink版Tablacus Explorerのからくり
- ドラッグ&ドロップの問題点など HOT 3
- 日付オブジェクトの問題点など
- Enabling TablacusExplorerWebView2 extension doesn't seem to work HOT 6
- No Quick Access present at the tree view HOT 3
- mouse middle/right button are invalid when install the webview2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tablacusexplorerwebview2.