4

新しいウィンドウ/タブを開く必要があるブックマークレットがあります。ポップアップ ブロッカーを回避するには、window.open()メソッドをブックマークレットで直接呼び出す必要があります。つまり、ブラウザー レベルで呼び出します。

ただし、外部 Javascript ファイルをロードして、ブックマークレットを更新可能に保ちたいと考えています。これを行うには、ブックマークレットでスクリプト ノードを DOM に追加する必要があります。これらの外部からロードされたスクリプトの 1 つにwindow.open()コードを挿入すると、ポップアップ ブロッカーがページ レベルでそれをブロックします。

私が知りたいのはwindow.open()、ブックマークレットでラッパー関数を作成し、外部からロードされたスクリプトから呼び出すことができるかどうかです。このようなラップの範囲と許可は何ですか?

4

2 に答える 2

1

完全ではありませんが、要件を満たすソリューションを思いつきました。

ブックマークレットのコードは次のとおりです。

javascript:window.open(window.location);window.location="http://www.google.com/";var%20s=document.createElement('script');s.setAttribute('src','http://my-script.js');document.body.appendChild(s);void(0);

読みやすいステップバイステップの同等物は次のとおりです。

window.open(window.location);                // Clone the current tab
window.location = "http://www.google.com/";  // Navigate to the desired page url
var s = document.createElement('script');    // Create the script
s.setAttribute('src','http://my-script.js'); //
document.body.appendChild(s);                // Embed it into current document

1 つだけ問題が残っています: 表示したいページはデフォルトではアクティブではありません。クローンされたものはです。

于 2010-05-23T17:10:45.647 に答える
0

そのアプローチが機能するかどうか疑問に思いました-機能することがわかってうれしいです.

ここでの一般的な問題は、ユーザーが直接操作しない限り、ブラウザが新しいウィンドウを開くことができないことです。そのため、リモート スクリプトからウィンドウを開くことはできません。

ブックマークレットから直接ウィンドウを開き、その場所に移動してから、リモート スクリプトを呼び出します。

私が行った別の方法は、リモート スクリプトの内容をブックマークレットに直接移動することでした。私の単純なアプリケーションではそれで問題ありませんでした。それをブログに書きました

于 2011-02-11T19:15:13.520 に答える