3

正確には、iframe のオブジェクト ウィンドウにアクセスする際に、Google Chrome の UserScripts に少し問題があります。Google Chrome コンソール経由では非常に実行可能ですが、UserScript 経由では非常に不可能であるか、今のところそう思われます。正直なところ、あたかも他のウィンドウ オブジェクトへのアクセスが許可されていない何らかの理由があるかのように、意図的にそうしているように思えます。

document.body.innerHTML += "<iframe name='iframe'></iframe>";
console.log(top.frames.iframe);
console.log(window.frames.iframe);
console.log(unsafeWindow.frames.iframe);
console.log(document.getElementsByName('iframe')[0].contentWindow);
console.log(document.getElementsByName('iframe')[0].contentDocument.defaultView);

-->

chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:14 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:15 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:16 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:17 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:18 undefined

Chrome の問題点をお聞きしてもよろしいですか?UserScript が通常のスクリプトよりも JavaScript へのアクセスを少なくする必要がある理由がよくわかりません。その意味は何ですか? ところで、はい、iframe は同じドメインとプロトコルにあります。:(

4

1 に答える 1

2

UnsafeWindowはChromeでサポートされていません。TamperMonkeyを試してください。その変数への読み取り専用アクセスが提供されていることを確認してください。

contentWindow.documentはChromeでは利用できません。contentDocumentが機能するはずです。

また、クロスドメインのXMLHttpRequestもサポートされていません。これらのほとんどはセキュリティを目的としています。Chromeのユーザースクリプトはコンテンツスクリプトであり、ウェブページや他のコンテンツスクリプトで定義されている関数/変数にアクセスすることはできません。これは主に、スクリプトのセキュリティと分離のためであり、スクリプトが互いに競合するのを防ぎます。

document.getElementsByName('iframe')[0] .contentWindowについては、iframeに追加しようとしている方法が原因だと思います。手始めに、iframeに「iframe」という名前を付けないでください。これは常に非常に悪い習慣です。

ボディのinnerHTMLに追加する代わりに、appendChild()を使用して、新しいiframeオブジェクトをdocument.bodyに追加します。また、document.getElementsByNameの代わりに、document.body.getElementsByNameを試してください。

Firefox用のグリースモンキースクリプトを書いていますが、Chromeは制限が厳しすぎるようです。そして、ユーザースクリプトのロケーションハックについて知っていただければ幸いです。http://wiki.greasespot.net/Location_hackをチェックしてください。ユーザースクリプトでJavascriptを使用できます;)そして今すぐお知らせするために、iframeやユーザースクリプトをいじらないように非常に警告します。私はGreasemonkeyのスクリプトを作成し、6か月間試しましたが、どういうわけか、iframe内にコードを含めると、半分の時間、その結果は未定義であり、javascriptでその問題に遭遇することはありません。また、.jsスクリプトオブジェクトをユーザースクリプトからドキュメントに挿入した場合でも、新しいコードは何らかの影響を受けるため、要素がランダムに未定義として表示されます。6か月間試した後、あきらめました。ブックマークレットを使用して、.jsスクリプトをドキュメントに手動で挿入するだけです。もちろん、そうする必要はありません。ロケーションハックを使用して、ユーザースクリプトからコードを挿入することができます。しかし、iframeのユーザースクリプトに基づいてスクリプト全体を書くことに関しては、私は

于 2010-10-31T16:35:39.203 に答える