[編集:元の紛らわしい質問を、問題を示す簡単な例に置き換えています。]
バックグラウンド
Chromeで実行されるユーザースクリプトを作成しようとしています。このスクリプトは、ユーザースクリプトの外部にあるJavaScript関数を呼び出す必要があります。AlertMe()
この関数はページの一部であり、サーバー側で動的に生成される変数が含まれているため、この関数を自分で書き直すことはできません。ユーザースクリプト。
コード
ページ上のスクリプト(ページにアクセス):
<script type="text/javascript">
function AlertMe()
{
alert("Function AlertMe was called!");
// then do stuff with strings that were dynamically generated
// on the server so that I can't easily rewrite this into the userscript
}
</script>
私のユーザースクリプト(Chromeにインストールしてください):
function tryAlert()
{
if (typeof AlertMe == "undefined") {
console.log('AlertMe is undefined.');
window.setTimeout(tryAlert, 100);
}
else {
AlertMe();
}
}
tryAlert();
問題
単に関数を呼び出そうとすると、ChromeのコンソールからそのことがわかりましたAlertMe is not defined
。これは、他のすべてのスクリプトがロードされる前にユーザースクリプトが実行されていたためだと考えて、関数が定義されるsetTimeout
のを待っていました。AlertMe
AlertMe is undefined.
残念ながら、スクリプトをインストールしてからページにアクセスすると、これは永久に出力され、関数を呼び出さないことがわかります。Chromeのコンソールに入力すると、typeof AlertMe
正しく応答しますが"function"
、なぜ私のユーザースクリプトはそれAlertMe
が未定義であると常に考えているのですか?