Excel链接不加载页面,但当链接粘贴到浏览器中时,它可以工作,

7dl7o3gd  于 2023-04-07  发布在  其他
关注(0)|答案(5)|浏览(119)

我在我的ruby-on-rails应用程序中放置了Excel电子表格中的超链接。链接指向一些特权页面,这些页面需要,登录后,我应该被带到所请求的页面。然而,发生的事情是,登录后,我在网站的主页上。有趣的是,当我右键单击Excel中的链接并将链接粘贴到Web浏览器URL中时,所以我不认为这是我的应用程序的错,而是Excel中的一些东西,我错过了?
我的场景和这个场景差不多:http://www.geekstogo.com/forum/topic/289186-excel-2007-hyperlink-loads-web-login-screen-not-linked-urlplease-help-me/

pod7payv

pod7payv1#

这个问题通常发生在IE中,我也遇到了同样的问题。
解决这个问题很简单
1.在公用文件夹中创建一个redirect.html页(由于您使用的是ROR,因此是公用文件夹)
1.将此复制到您的redirect.html

<html>
<body>
Please wait, loading your page... 
<script type="text/javascript">
function getQuerystring(key) {
key = key.replace(/[\[]/,"\\\[").replace(/    [\]]/,"\\\]");
var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
var query = regex.exec(window.location.href);
return query[1];
}
window.location = window.location.protocol + "//" + window.location.host + "/" + getQuerystring('page');
</script>
</body>
</html>

1.应该修改您在excel中构造的链接
例如,旧链接-http://test.com/post/comments/1新链接应为-http://test.com/redirect.html?page=post/comments/1
1.您需要将URL的一部分(在基本URL之后)作为参数传递
这是怎么回事。
当用户点击Excel中的链接时,它指向redirect.html,javascript将构造实际的URL并再次重定向到正确的页面,如果用户已经登录,则将导航到实际页面,否则将重定向到登录/主页。

js81xvg6

js81xvg62#

我不确定这是否是一个答案,但我在申请时也遇到了同样的问题。
整个应用程序,包括主页,都是受保护的(我使用的是Devise),所以每当用户想要访问http://myapp时,它都会将他重定向到http://myapp/users/sign_in
我认为Devise使用301或302重定向到登录屏幕。
我的发现是在Office中点击的链接和在IE中打开的链接不能适应这个重定向(当Chrome是默认浏览器时没有问题)。
最后,我没有找到其他的解决办法,只能直接链接到登录页面……也许还有其他的选择,但我仍然在寻找它们。
编辑:找到这篇文章(从2006年)about a bug in Outlook,它完全符合我们的情况。再次,不是一个解决方案,但至少是一个解释。

rn0zuynd

rn0zuynd3#

这是Excel的internal URL handling的问题,它与现代Web设计模式(例如会话+重定向)有关。
下面是一个客户端解决方案,它绕过Excel的内部机制,而是使用操作系统默认的URL处理程序。请注意,由于它使用宏,因此这种方法需要适当的安全设置。
在工作表的VBA模块中,添加以下代码:

Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hWnd As Long, _
    ByVal Operation As String, _
    ByVal Filename As String, _
    Optional ByVal Parameters As String, _
    Optional ByVal Directory As String, _
    Optional ByVal WindowStyle As Long = vbMinimizedFocus _
) As Long

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    ShellExecute 0, "Open", Target.Address
End Sub

这是基于twoother SO答案的答案。

eyh26e7m

eyh26e7m4#

我在@Bharath的回答中更新了redirect.html,用现在可用的Web API替换了正则表达式操作:

请参阅@Bharath的original answer以获得进一步的解释。

<!DOCTYPE html>
<html lang="en">
<body>
One moment please. We are trying to connect you ...
<script type="text/javascript">
    const url = new URL(window.location.href);
    const params = new URLSearchParams(url.search);
    const redirectTo = params.get('page');
    location = `${url.origin}/${redirectTo}`;
</script>
</body>
</html>

当然,也有处理错误(例如if (params.has('page'))等的余地。
另见Google的Eric Bidelman的Easy URL Manipulation with URLSearchParams

vwkv1x7d

vwkv1x7d5#

我现在正面临着同样的问题。
有人能帮我解决这个问题吗?我运行的是x86位的thinkpad。所以上面提供的客户端解决方案对我不起作用。还有其他想法吗?

相关问题