最初のウィンドウ(ウィンドウ1と呼びます)から2番目のウィンドウ(ウィンドウ2)を開いています。
var w = window.open("", "");
ウィンドウ2内から、次のようなコードを使用して、ウィンドウ1で定義された配列を参照および操作しています。
window.opener.object2[0].drivedistance = driveDistance;
このコードは正常に機能します。ただし、この配列の結果をウィンドウ2に表示する前に、並べ替える必要があります。並べ替えの試み:
window.opener.objects2.sort(compareFunc)
function compareFunc(a, b){
return (a.drivedistance - b.drivedistance)
}
リモートウィンドウから呼び出さずにjsfiddleで同じメソッドを使用すると、正常に機能しているようです。
コードをステップスルーすると、compareDrivingでコードが実行されていることがわかります。例外はスローされていません。ただし、compareDrivingの呼び出しが完了した後、配列はソートされません。並べ替えている配列がウィンドウ1にあるので、これが何らかのセキュリティの問題であるかどうかはわかりませんが、JavaScriptはウィンドウ2にありますか?このソートコードが機能しない理由についてのアイデアをいただければ幸いです。
コメントに基づいて、私はそれをうまく示しているように見える問題のjsfiddleをまとめました。最終的な解決策を明確にするために、コレクションのリポジトリであるページ1が必要ですが、ページ1のコレクションをソートするロジックを開始するにはページ2が必要です。
奇妙な。これをもう少し試してみると、2ページではなく1ページに存在するハンドラーをsort関数に渡すことで、目的を達成できる可能性があります。ただし、2ページで関数をリモートで実行すると、逆にソートされます。 1ページから実行するときと同じように注文します。おそらくこれを試して動作させることができますが、それでもベストプラクティスに関する提案をいただければ幸いです。これが私の発見の最新のフィドルです。
私はポップアップ機能を使用しているので、これらのいずれかをテストするには、ポップアップを有効にする必要があることに注意してください。
編集。クロスブラウザの結果は、最後のjsfiddleでは非常にむらがあることがわかりました。私の相棒はそれをクロムで試しました、そしてそれは彼のために働きました。Chromeで試してみましたが、結果が並べ替えられません。IEは逆にソートします。私はFirefoxをまったく動作させていません。クロスブラウザ互換のクロスウィンドウソートを実行する方法に関するヘルプは、私が本当にここで求めているものだと思います。ありとあらゆる答えをありがとう。