私は PrimeFaces 6.0、JSF 2.2 (Mojarra 2.2.7) アプリケーションに取り組んでいます。
外部サイトから Web ページを読み込み、DOM ノードを強調表示する必要があります。私のアプローチは、JavaScript 関数を作成してポップアップ ウィンドウを開き、(クロス ドメインの問題を回避するために) サーブレットを介して Web ページを読み込み、ノードを強調表示することです。関数に送信するパラメーターはマネージド Bean で生成されます。
私は2つの異なる方法でそうしようとしました:
- アクションで使用
RequestContext.getCurrentInstance().execute("myFunction(...)")
します (はい、PrimeFaces を使用しています)。 oncomplete="#{myBean.myJsCall}"
コマンドボタンで使用します。
どちらの方法でも呼び出しが実行され、呼び出しは正しいのですが、ブラウザー (Chromium) のポップアップ ブロッカーに遭遇します。
ポップアップをブロックせずにJSFまたは特にPrimeFacesで開く方法はありますか?
これはあまり関係ありませんが、これは私の JavaScript 関数の単純化されたバージョンです。
このスクリプトは、プレーンな HTML と JS を使用して開発しました。そこでは、ブロッカーが干渉することなくポップアップが開かれていました。また、JSF アプリケーションの実行時に呼び出しをコンソールに貼り付けると、ポップアップが開きます。
function myFunction(url, selector) {
var popup = window.open("", "popup", "height=500,width=700");
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState === XMLHttpRequest.DONE) {
popup.document.open();
popup.document.write(req.responseText);
popup.document.close();
popup.document.addEventListener(
"DOMContentLoaded",
function() { /* Some code highlighting the selector */ },
false
);
}
}
req.send();
}