试图阻止弹出窗口(需要替代“window.open”)

3

我正在使用 Facebook SDK,由于安全问题,它现在通过弹出窗口工作。

因此,我有一个处理 Facebook 的按钮 [FacebookButton],它是隐藏的,并且有一个测试弹出窗口拦截程序的按钮 [PopupTester]。

我的代码如下:

当点击 [PopupTester] 按钮时,如果弹出窗口可以使用:关闭它,隐藏此按钮并显示 [FacebookButton]。

或者

当点击 [PopupTester] 按钮时,如果弹出窗口无法使用,则显示对话框以促使更改弹出窗口设置,保持 [FacebookButton] 隐藏,将此按钮值更改为 [重试]。

function testPopupBlocker() {
  var windowName = 'userConsole'; 
  var popUp = window.open('http://www.whirlocal.com', windowName, 'width=200, height=200, left=24, top=24, scrollbars, resizable');
  if (popUp == null || typeof(popUp)=='undefined') {
    var weGood = "nope";
    alert('Please disable your pop-up blocker and click the link to test again.'); 
  } 
  else {
    var weGood = "yup";
    popUp.close();
  }

这很好用,但是这个按钮总是会创建一个弹出窗口,但Facebook的按钮仍然被阻止了!

除了“window.open”之外,是否有其他方法可以创建弹出窗口?另一种更可能被阻止的方法吗?

编辑:

这是我的按钮代码

<input type="button" class="genButton testPopupButton" name="Test Popup Blocker" title="Test Popup Blocker" value="Test Popup Blocker" onclick="testPopupBlocker()" style="cursor:pointer;" />

<input type="button" class="genButton needsPopups facebookButton" name="AdvocateOnFacebook" title="Recommend <?php echo genesis_get_option('organization','child-settings');?> on Facebook" value="Recommend us on Facebook!" onclick="advocateToFriends()" style="cursor:pointer; display:none;" />
1个回答

0
你需要合法化弹出窗口。它必须由用户发起,而不是任意的弹出窗口代码,否则弹出窗口拦截程序会阻止它。一旦你掌握了弹出窗口,你可以随意修改它。
试试这段HTML代码:
<a href="#" onclick="javascript:window.open('http://myurl.com/blank_page.html','userConsole','width=800,height=600,directories=no,location=no,menubar=no,status=no,toolbar=no,scrollbars=auto,resizeable=yes');">
    <div class="some_div_class"><b>Click Me</b></div>
</a>

然后运行你的testPopupBlocker()函数,看看它是否能够更好地工作。


抱歉,我应该在上面提到我的按钮会触发那个函数。已经进行了编辑。 - ZipZopZoobityBop
没问题,你可以在从被点击的dom元素初始化window.open之后调用该函数。主要是要先从点击的对象调用window.open,从而使其成为合法的弹出窗口。 - MMeah
"userConsole" 是将所有内容绑定在一起的窗口句柄。同样,在事先合法化弹出窗口后,再使用标准 JavaScript 进行修改。 - MMeah
所以它仍然没有工作。在这里看http://www.blackchapman.whirlocal.com/thank-you Facebook被阻止了。我“需要”另一个被阻止,以通知用户他们的设置需要更改,但它仍然没有被阻止:/ - ZipZopZoobityBop
如果你已经有一个弹出窗口在工作,为什么不让它为你加载FB代码呢?一次只解决一个问题。先让弹出窗口工作,然后再在其中加载FB。 - MMeah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接