2016-06-17 7 views
0

私はさまざまな方法で解決しようとしましたが、完全に困惑しています。私は、彼らはAJAXを経由して提出している前に、Webページ上のいくつかの入力要素の値を変更するChromeの拡張機能を書いています...Chromeコンテンツスクリプトの中からknockout.js observablesを更新する "孤立した世界"

問題

。要素は、最初のAJAX要求の応答に基づいて構築されたノックアウトモデルを使用して作成されます。問題は、私のChromeコンテンツスクリプトがinput要素の値を更新するたびに、Knockout観測点は更新されず、最後のPOST要求は変更されていないシリアル化されたKnockoutオブジェクトを使用することです。

私が見てきたいくつかの解決策は、直接観察ノックアウトを更新する、のいずれか

  1. を示唆している - 私のスクリプトは独自のサンドボックス(または、「単離された世界」)であるとして、不可
  2. 値を更新した後で要素のchangeイベントを手動でトリガーする - だからはこれがうまくいくことを願っています。しかし、それは何もしないようです。今日この事を数時間も遊んだ後の私の理解は、このイベントはでもはサンドボックスに隔離されているということです(でも間違っている可能性があります)。

私が見ることができる(そしてこれは醜い)唯一の解決策は、POSTをブロックし、要求の内容を直接変更することです。しかし、私はちょうどDOMのフォームを変更することができたとき、それはとてもばかげているようです...

アイデア?私は本当にいくつかの援助を使うことができます

答えて

0

私はそれを理解しました。thisのおかげで答えました。 JavaScriptをページに挿入できるかどうかはわかりませんでした。だから、changeイベントトリガーをDOMに注入しています。その結果、コンテンツスクリプトスコープではなくページスコープで呼び出されます。

var script = document.createElement('script'); 
script.textContent = "$(\'.myInputField\').eq(" + i + ").change()"; 
(document.head || document.documentElement).appendChild(script); 
script.parentNode.removeChild(script); 
関連する問題